《TCP/IP网络编程》学习笔记 | Chapter 15:套接字与标准 I/O

瑞芯微RK3506开发板Ethercat主站性能优化实战:从内核配置到微秒级延迟控制 本文详细介绍了在瑞芯微RK3506开发板上实现EtherCAT主站微秒级延迟控制的实战优化方案。核心在于部署Preempt-RT实时内核,并进行深度系统调优,包括CPU隔离、中断亲和性设置、内存锁定及电源管理调整。通过绕过Linux网络栈的专用驱动加载与配置,最终实现了稳定的高性能实时控制,满足工业自动化需求。 阅读详情

《TCP/IP网络编程》学习笔记 | Chapter 15:套接字与标准 I/O

标准 I/O 函数

标准 I/O 函数的两个优点

除了使用 read 和 write 函数收发数据外,还能使用标准 I/O 函数收发数据。下面是标准 I/O 函数的两个优点:

  • 标准 I/O 函数具有良好的移植性
  • 标准 I/O 函数可以利用缓冲提高性能

不仅是I/O函数,所有的标准函数都具有很好的移植性,为了支持所有的操作系统和编译器,这些函数都是按照ANSI C标准定义的。

创建套接字时,操作系统会准备 I/O 缓冲。此缓冲在执行 TCP 协议时发挥着非常重要的作用。此时若使用标准 I/O 函数,将得到额外的缓冲支持。如下图:

在这里插入图片描述

套接字中的缓冲区主要是为了实现TCP协议而设立的,TCP在传输数据的过程中,如果丢失了数据,将会再次进行传输,而再次发送数据,意味着数据保存在了某个地方,并没有丢失,保存的地方就是套接字的输出缓冲区。与之相反,使用标准IO函数缓冲的主要目的是为了提高性能。

实际上,缓冲区并非在所有情况下都能带来卓越的性能,但是如果传输的数据量越大,有无缓冲带来的性能差异就越大。

标准 I/O 函数和系统函数之间的性能对比

下面是利用系统函数的示例:

#include <stdio.h>
#include <fcntl.h>
#include <cstdlib>
#include <ctime>
#include <unistd.h>

#define BUF_SIZE 3

// 采用未提供缓冲区技术的read,write方法进行拷贝文件

int main(int argc, char *argv[])
{
    int fd1, fd2; // 文件描述符
    int len;
    char buffer[BUF_SIZE];

    fd1 = open("news.txt", O_RDONLY);
    fd2 = open("cpy.txt", O_WRONLY | O_CREAT | O_TRUNC);

    clock_t start = clock();

    while ((len = read(fd1, buffer, BUF_SIZE)) > 0)
        write(fd2, buffer, len);

    close(fd1);
    close(fd2);

    clock_t end = clock();

    double timespan = ((double)(end - start)) / CLOCKS_PER_SEC;

    printf("Total time consume is %f ms.\n", timespan * 1000);

    return 0;
}

输出:

在这里插入图片描述

如果是采用上述代码,数据传输的时间需要很长。

下面采用标准I/O函数复制文件:

#include <stdio.h>
#include <fcntl.h>
#include <cstdlib>
#include <ctime>

#define BUF_SIZE 3

int main(int argc, char *argv[])
{
    FILE *fp1, *fp2;

    char buffer[BUF_SIZE];

    fp1 = fopen("news.txt", "r");
    fp2 = fopen("cpy.txt", "w");

    if (fp1 == NULL || fp2 == NULL)
    {
        printf("Failed to open file.\n");
        return -1;
    }

    // 程序计数
    clock_t start = clock();
    while (fgets(buffer, BUF_SIZE, fp1) != NULL)
        fputs(buffer, fp2);

    fclose(fp1);
    fclose(fp2);

    clock_t end = clock();

    // 计算消耗时间
    double timespan = ((double)(end - start)) / CLOCKS_PER_SEC;
    printf("The total time consume is %f ms.\n", timespan * 1000);

    return 0;
}

输出:

在这里插入图片描述

该示例用标准IO函数fputs和fgets函数复制文件,是一种基于缓冲的复制,就很快。

标准 I/O 函数的几个缺点

标准 I/O 函数存在以下几个缺点:

  • 不容易进行双向通信。
  • 有时可能频繁调用 fflush 函数。
  • 需要以 FILE 结构体指针的形式返回文件描述符。

打开文件时,如果希望同时进行读操作,则应以 r+、w+、a+ 模式打开。但因为缓冲的缘故,每次切换读写工作状态时应调用fIush为数。这也会影响基于缓冲的性能提高。而且,为了使用标准IO函数,需要FILE结构体指针。而创建套接字时默认返回文件描述符,需要将文件描述符转化为FILE指针。

使用标准 I/O 函数

利用 fdopen 函数转换为 FILE 结构体指针

函数原型如下:

#include <stdio.h>

FILE *fdopen(int fildes, const char *mode);

成功时返回转换的 FILE 结构体指针,失败时返回 NULL。

参数:

  • fildes:需要转换的文件描述符
  • mode:将要创建的 FILE 结构体指针的模式信息

示例程序:

#include <stdio.h>
#include <fcntl.h>

int main()
{
    FILE *fp;
    int fd = open("data.dat", O_WRONLY | O_CREAT | O_TRUNC); // 创建文件并返回文件描述符
    if (fd == -1)
    {
        fputs("file open error", stdout);
        return -1;
    }
    fp = fdopen(fd, "w"); // 返回写模式的 FILE 指针
    fputs("NetWork C programming \n", fp);
    fclose(fp);
    return 0;
}

编译,运行结果:

C:\Users\81228\Documents\Program\TCP IP Project\Chapter 15>gcc desto.c -o desto

C:\Users\81228\Documents\Program\TCP IP Project\Chapter 15>desto

C:\Users\81228\Documents\Program\TCP IP Project\Chapter 15>cat data.dat
'cat' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

C:\Users\81228\Documents\Program\TCP IP Project\Chapter 15>type data.dat
NetWork C programming

可以看出,fdopen 函数将文件描述符转换为 FILE 指针,并可以通过该指针调用标准 I/O 函数。

利用 fileno 函数转换为文件描述符

函数原型如下:

#include <stdio.h>

int fileno(FILE *stream);

成功时返回文件描述符,失败时返回 -1。

示例程序:

#include <stdio.h>
#include <fcntl.h>

int main()
{
    FILE *fp;
    int fd = open("data.dat", O_WRONLY | O_CREAT | O_TRUNC);
    if (fd == -1)
    {
        fputs("file open error", stdout);
        return -1;
    }

    printf("First file descriptor : %d \n", fd);
    fp = fdopen(fd, "w"); // 转成 file 指针
    fputs("TCP/IP SOCKET PROGRAMMING \n", fp);
    printf("Second file descriptor: %d \n", fileno(fp)); // 转回文件描述符
    fclose(fp);
    return 0;
}

编译,运行结果:

C:\Users\81228\Documents\Program\TCP IP Project\Chapter 15>gcc todes.c -o todes

C:\Users\81228\Documents\Program\TCP IP Project\Chapter 15>todes
First file descriptor : 3
Second file descriptor: 3

输出的文件描述符值相同,证明 fileno 函数争取转换了文件描述符。

基于套接字的标准 I/O 函数使用

把第四章的回声客户端和回声服务端的内容改为基于标准 I/O 函数的数据交换形式。

echo_stdserv.c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define BUF_SIZE 1024

void error_handling(char *message);

int main(int argc, char *argv[])
{
    int serv_sock, clnt_sock;
    char message[BUF_SIZE];
    int str_len, i;

    struct sockaddr_in serv_adr, clnt_adr;
    socklen_t clnt_adr_sz;
    FILE *readfp;
    FILE *writefp;

    if (argc != 2)
    {
        printf("Usage : %s <port>\n", argv[0]);
        exit(1);
    }

    serv_sock = socket(PF_INET, SOCK_STREAM, 0);
    if (serv_sock == -1)
        error_handling("socket() error");

    memset(&serv_adr, 0, sizeof(serv_adr));
    serv_adr.sin_family = AF_INET;
    serv_adr.sin_addr.s_addr = htonl(INADDR_ANY);
    serv_adr.sin_port = htons(atoi(argv[1]));

    if (bind(serv_sock, (struct sockaddr *)&serv_adr, sizeof(serv_adr)) == -1)
        error_handling("bind() error");

    if (listen(serv_sock, 5) == -1)
        error_handling("listen() error");

    clnt_adr_sz = sizeof(clnt_adr);
    // 调用 5 次 accept 函数,共为 5 个客户端提供服务
    for (i = 0; i < 5; i++)
    {
        clnt_sock = accept(serv_sock, (struct sockaddr *)&clnt_adr, &clnt_adr_sz);
        if (clnt_sock == -1)
            error_handling("accept() error");
        else
            printf("Connect client %d \n", i + 1);

        readfp = fdopen(clnt_sock, "r");
        writefp = fdopen(clnt_sock, "w");
        while (!feof(readfp))
        {
            fgets(message, BUF_SIZE, readfp);
            fputs(message, writefp);
            // 刷新文件流中的缓冲区,将缓冲区中的数据强制写入文件
            fflush(writefp);
        }

        fclose(readfp);
        fclose(writefp);
    }
    close(serv_sock);
    return 0;
}

void error_handling(char *message)
{
    fputs(message, stderr);
    fputc('\n', stderr);
    exit(1);
}

echo_client.c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define BUF_SIZE 1024

void error_handling(char *message);

int main(int argc, char *argv[])
{
    int sock;
    char message[BUF_SIZE];
    int str_len;
    struct sockaddr_in serv_adr;
    FILE *readfp;
    FILE *writefp;
    if (argc != 3)
    {
        printf("Usage : %s <IP> <port>\n", argv[0]);
        exit(1);
    }

    sock = socket(PF_INET, SOCK_STREAM, 0);
    if (sock == -1)
        error_handling("socket() error");

    memset(&serv_adr, 0, sizeof(serv_adr));
    serv_adr.sin_family = AF_INET;
    serv_adr.sin_addr.s_addr = inet_addr(argv[1]);
    serv_adr.sin_port = htons(atoi(argv[2]));

    if (connect(sock, (struct sockaddr *)&serv_adr, sizeof(serv_adr)) == -1)
        error_handling("connect() error!");
    else
        puts("Connected...........");
    readfp = fdopen(sock, "r");
    writefp = fdopen(sock, "w");
    while (1)
    {
        fputs("Input message(Q to quit): ", stdout);
        fgets(message, BUF_SIZE, stdin);

        if (!strcmp(message, "q\n") || !strcmp(message, "Q\n"))
            break;

        fputs(message, writefp);
        fflush(writefp);
        fgets(message, BUF_SIZE, readfp);
        printf("Message from server: %s", message);
    }
    fclose(writefp);
    fclose(readfp);
    return 0;
}

void error_handling(char *message)
{
    fputs(message, stderr);
    fputc('\n', stderr);
    exit(1);
}

此处接收数据的缓冲区没有在结尾增加0,与第四章的不同,原因:使用标准I/O函数后可以按字符串单位进行数据交换。

printf 函数以参数" % s"输出字符串时过程为:

  1. 从首地址开始逐字节寻址,把存储单元(一个字节)内的数据转换为ASCII字符格式输出。
  2. 直到某一个字节内存的元素为字符’\0’时,输出此字符并且寻址结束。

习题

(1)请说明标准I/O函数的2个优点。它为何拥有这2个优点?

  • 标准 I/O 函数具有良好的移植性。因为这些函数都是按照ANSI C标准定义的,支持所有的操作系统和编译器。
  • 标准 I/O 函数可以利用缓冲提高性能。因为使用标准 I/O 函数,将得到额外的缓冲支持。可以降低传输的数据量,减少数据向输出缓冲移动的次数,这两种都能提升性能。

(2)利用标准I/O函数传输数据时,下面的想法是错误的:“调用fputs函数传输数据时,调用后应立即开始发送!”为何上述想法是错误的?为了达到这种效果应添加哪些处理过程?

通过标准输出函数的传输的数据不直接通过套接字的输出缓冲区发送,而是保存在标准输出函数的缓冲中,然后再用fflush函数进行输出。因此,即使调用fputs函数,也不能立即发送数据。如果想保障数据传输的时效性,必须经过fflush函数的调用过程。

安卓讲课笔记1.1 安装Android Studio 1. 能安装配置Android Studio; 2. 能创建安卓虚拟机(AVD); 3. 能创建简单安卓应用 阅读详情

相关推荐

【银行测试】手机银行APP专项项目+测试点汇总(一)

1、手机银行APP转账项目讲解面试官:请介绍一下你所负责的模块如何进行的测试?求职者:好的,我最近测试的是XX银行的手机银行App项目。这个项目里面包含了转账、转账额度调整、网银转账、交易明细、添加账户、存款、投资理财、生活缴费等功能模块。我主要负责了转账模块,这个大模块中包含了智能转账、手机转账、语音转账、预约转账、收款人管理等5个子模块,我首先介绍一下我们生活中使用最多的手机转账子模块。对于转账需要关注的是转账前、转账中、转账后这三个状态下的测试。

m0_70102063的博客 1605

TCP/IP网络编程——套接字和标准I/O

TCP/IP网络编程——套接字和标准I/O

u011895157的博客 529

伺服电机的位置控制模式:PP模式与CSP模式的比较

在轮廓位置模式下,上位机给定目标绝对位置(或相对位置)、速度、加速度等参数,伺服内部的轨迹发生器根据这些参数生成目标位置曲线指令,通过伺服驱动器内部实现三环控制(位置环、速度环、力矩环)。如果还不理解,不妨看看下面的类比:轮廓位置模式中,上位控制器对伺服电机说,我给你个位置,怎么去哪,走那条路,那是你自己的事,这个时候伺服电机是有自己的思想的。同期同步位置模式红,上位机控制器对伺服电机的管理就和 严格,除了告诉你目标位置,走那条路都是控制器说的算,伺服电机就是个没有灵魂的工具。重点关注,轮廓位置模式。

m0_49968063的博客 5806

《TCP/IP网络编程》第 15 章 套接字和标准I/O 笔记

第 15 章 套接字和标准I/O 本章代码,在TCP-IP-NetworkNote中可以找到。 15.1 标准 I/O 的优点 15.1.1 标准 I/O 函数的两个优点 下面是标准 I/O 函数的两个优点: 标准 I/O 函数具有良好的移植性 标准 I/O 函数可以利用缓冲提高性能 创建套接字时,操作系统会准备 I/O 缓冲。此缓冲在执行 TCP 协议时发挥着非常重要的作用。此时若使用标准 ...

riba2534的博客 679

深入解析SGLang框架:从架构设计到核心组件实现

本文深入解析了SGLang框架的架构设计与核心组件实现。SGLang是一个专为大语言模型推理设计的高效框架,其核心优势在于清晰的分层架构、高效的调度策略以及精细的内存管理。文章详细剖析了其客户端接入、服务器端调度、模型执行引擎及Tokenizer/Detokenizer管理器等关键组件,揭示了其实现高性能推理的内部机制。

coffee的博客 577

动态规划与状态压缩:从TSP问题理解算法优化核心思想

动态规划是一种通过将复杂问题分解为重叠子问题并存储中间结果来避免重复计算的核心算法思想,广泛应用于路径优化、资源分配和序列决策等场景。其核心原理在于最优子结构和无后效性,通过状态设计和状态转移方程,将指数级复杂度问题转化为多项式时间可解。在工程实践中,状态压缩技术常被用于高效表示集合状态,例如使用二进制位运算来操作城市访问集合,从而大幅提升算法效率。本文以经典的旅行商问题(TSP)为例,深入剖析如何运用动态规划与状态压缩技术,将暴力穷举的指数级复杂度优化为可管理的计算量,为解决组合优化问题提供了重要的方法论

weixin_32075843的博客 365

《TCP/IP网络编程》第15章 套接字和标准I/O

本章所有示例代码&gt;&gt;gtihub15.1 标准I/O函数的优点    fopen、feof、fgets、fputs函数等。1.       标准I/O函数的两个优点标准I/O函数具有良好的移植性(Portability)(ANSIC)标准I/O函数可以利用缓冲提高性能    创建套接字时,操作系统将生成用于I/O的缓冲。此缓冲在执行TCP协议时发挥着非常重要的作用。此时若使用标准I/O...

wjb1204的专栏 332

一文读懂 MAVLink、PPM、SBUS:无人机通信协议的工作原理与适用场景

本文系统对比无人机领域三大核心通信协议:MAVLink作为全链路数据协议,支持飞控与地面站的双向通信,适合航拍测绘等专业场景;SBUS是数字化的高效控制协议,具备16通道、抗干扰特性,成为中高端设备标配;PPM作为传统模拟协议,成本低廉但性能有限,适合入门级应用。文章深入解析各协议的工作原理、帧结构、适用场景及调试技巧,指出MAVLink侧重状态监控、SBUS/PPM专注控制指令的互补关系,并给出新手选型建议:入门选PPM,进阶用SBUS,开发必备M

bother3000的博客 7126

UNIX网络编程卷1:套接字联网API(第3版) 中文高清带完整书签 PDF

《UNIX网络编程 卷1:套接字联网API(第3版)》┊(美)W. Richard Stevens Bill Fenner Andrew M. Rudoff[.PDF]

嵌入式C 8951

IEEE Access投稿全流程解析:从初次提交到最终接收的完整指南

本文详细解析了IEEE Access期刊从初次投稿到最终接收的全流程,包括ORCID注册、论文投稿七步法、回稿再投流程及最终版提交等关键步骤。特别强调了4-6周快速同行评审的特点,为研究者提供了一份实用的投稿指南,帮助高效完成IEEE Access期刊投稿。

weixin_29273849的博客 915

Cadence Design Entry HDL 使用教程

Cadence Design Entry HDL 使用教程 前言 cadence Design Entry HDL是cadence内部集成的一款板级的EDA设计工具,早期叫 concept HDL。其为cadence最早的原配板级电路图绘制工具,只不过由于后来cadence收购了orcad然后就将旗下的capture CIS收入其中,由于后者使用起来上手简单,所以后者更为大家所熟知。虽然大家对...

uio159753的博客 4万+

TCP/IP网络编程_基于Linux的编程_第15章套接字和标准I/O

15.1 标准I/O 函数的优点 本章将介绍利用标准的I/O函数收发数据的方法. 如果各位不太熟悉或已忘记多种标准函数, 最好准备一本C语言的书在开始学习本章的学习. 当然, 如果熟练掌握了文件操作时使用fopen, feof, fgetc, fputs 函数, 就没必要再参考C语言的书了. 标准 I/O 函数的两个优点 将标准 I/O 函数用于数据通信并非难事. 但仅掌握函数的使用方法并没有太大的意义, 至少应该了解这些函数具有的优点. 下面列出的是标准I/O函数的两个优点. 关于移植性无需过多的解析..

weifc-wei 的博客 231

【深度学习新浪潮】OpenClaw跟机器人行业有哪些很好的研究结合点?

OpenClaw正通过"AI大脑+机器人肢体"的深度融合,重新定义机器人与人类的交互方式和自主操作能力。近期ROSClaw框架发布、人形机器人集成和空间计算试验等进展,标志着OpenClaw已从概念验证阶段进入实际应用落地期,为机器人行业带来了自然语言控制普及化具身智能平民化和跨平台开发标准化三大变革机遇。

专注:太空算力、AI infra、异构调度、大模型成本工程 229

《TCP/IP 网络编程》第 15 章——套接字和标准 I/O(学习笔记)

代码链接 第 15 章 套接字和标准 I/O 15.1 标准 I/O 函数的优点 15.1.1 标准 I/O 函数的两个优点 下面列出的是标准 I/O 函数的两大优点。 标准 I/O 函数具有良好的移植性 标准 I/O 函数可以利用缓冲提高性能 创建套接字时,操作系统将生成用于 I/O 的缓冲。此缓冲在执行 TCP 协议时发挥着非常重要的作用。此时若使用标准 I/O 函数,将得到额外的另一缓冲的支持。 I/O 函数缓冲在套接字缓冲之上。例如,通过 fputs 函数传输字符串『Hello』时,首先将数据传

←_← 286

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

TCP/IP网络编程(三)

读书笔记

m0_45172994的博客 939

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TCP/IP网络编程 基于Linux编程_1 --套接字中标准I/O的使用

标准I/O1,什么是标准I/O?其实是指C语言里的文件操作函数,如:fopen,feof,fgetc,fputs等函数,他们和平台无关。2,网络通信中使用标准I/O的优点: 良好的移植性。良好移植性这个不需多解释,不仅是I/O函数,所有的标准函数都具有良好的移植性。因为,为了支持所有的操作系统(编译器),这些函数都是按照ANSI C标准定义的。 标准I/O函数可以利用缓冲提高性能。在网络通信中,re

疯狂的程序员 1610

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

《TCP/IP网络编程》课后练习答案第二部分15~18章 尹圣雨

第十五章 套接字和标准IO 请说明标准I/O函数的2个优点。它为何拥有这2个优点? 基于ANSIX标准具有良好的一致性 可以利用缓冲提高性能 标准IO中,“调用fputs函数传输数据时,调用后应立即开始发送!”,为何这种想法是错误的?为了达到这种效果应添加哪些处理过程? 通过标准输出函数的传输的数据不直接通过套接字的输出缓冲区发送,而是保存在标准输出函数的缓冲中,然后再用ffl...

KongJHong的博客 4316

TCP/IP网络编程_基于Linux的编程_第16章关于I/O分流的其他内容

16.1 分离 I/O 流 “分离I/O流” 是一种常用表达. 有 I/O 工具

weifc-wei 的博客 244

TCP/IP网络编程第15章多种I/O函数复习总结

先了解以下标准IO和系统IO或者叫文件IO的大致区别,具体细节化的区别下面慢慢展开。 标准IO是ANSI C建立的一个标准IO模型,是一个标准数据函数包和stdio.h头文件种的定义,所以很明显标准IO的有很高的可移植性。并且采用了缓冲机制。 而文件IO属于低级IO,是操作系统提供的基本IO服务,与OS绑定,特定于linux或unix平台,因此并没有很高的可移植性。不带缓存。 以上是大致区别。 下...

博客周 298

华为顶级网络工程师封神之作:TCP/IP网络编程笔记

本书涵盖操作系统、系统编程、TCP/IP协议等多种内容,结构清晰、讲解细致、通俗易懂。此书面向利用套接字进行网络编程的初学者,具备C语言基础知识的读者会获得更多帮助。书中收录了丰富的示例,详细展现了Linux和Windows平台下套接字编程的共性与个性。特别是从代码角度说明了不同模型服务器端的区别,还包括了条件触发与边缘触发等知识,对开发实践也有很大帮助。 为初学者准备的网络编程 第一部分主要介绍网络编程基础知识。此部分主要论述Windows和Linux平台网络编程必备基础知识,未过多涉及不同.

weixin_50666791的博客 205

Java网络编程基础(TCP/IP协议、Socket编程)

TCP/IP(传输控制协议/互联网协议)是一组用于网络通信的标准协议集。它由多个层次组成,每个层次负责不同的功能。应用层:提供应用程序之间的通信,如HTTP、FTP、SMTP等。传输层:负责端到端的数据传输,主要协议有TCP(传输控制协议)和UDP(用户数据报协议)。网络层:负责IP地址的寻址和路由,主要协议是IP(互联网协议)。链路层:负责物理网络设备之间的通信,如以太网、Wi-Fi等。服务器端使用监听指定端口。使用accept()方法接受客户端连接。使用和进行数据读写。客户端使用。

yuehua00的专栏 1378

华为顶级网络工程师分享出这份TCP/IP网络编程笔记!已封神

本书涵盖操作系统、系统编程、TCP/IP协议等多种内容,结构清晰、讲解细致、通俗易懂。此书面向利用套接字进行网络编程的初学者,具备C语言基础知识的读者会获得更多帮助。书中收录了丰富的示例,详细展现了Linux和Windows平台下套接字编程的共性与个性。特别是从代码角度说明了不同模型服务器端的区别,还包括了条件触发与边缘触发等知识,对开发实践也有很大帮助。 为初学者准备的网络编程 第一部...

m0_62695120的博客 227

华为顶级网络工程师的封神TCP/IP网络编程笔记,限时开源

本书涵盖操作系统、系统编程、TCP/IP协议等多种内容,结构清晰、讲解细致、通俗易懂。此书面向利用套接字进行网络编程的初学者,具备C语言基础知识的读者会获得更多帮助。书中收录了丰富的示例,详细展现了Linux和Windows平台下套接字编程的共性与个性。特别是从代码角度说明了不同模型服务器端的区别,还包括了条件触发与边缘触发等知识,对开发实践也有很大帮助。 为初学者准备的网络编程 第一部分主要介绍网络编程基础知识。此部分主要论述Windows和Linux平台网络编程必备基础知识,未过多涉及不同.

文章中资料均可获取,有需要请添加yunduoa2019即可 145

《UNIX网络编程》 卷1 笔记

第五章 5.6正常启动 显示详细的网络状况: netstat -anp -a或–all 显示所有连线中的Socket。 -n或–numeric 直接使用IP地址,而不通过域名服务器。 -p或–programs 显示正在使用Socket的程序识别码和程序名称. 5.8 POSIX信号处理 1.如果一个信号在被阻塞期间产生了一次或多次,那么该信号被解阻塞之后通常只递交一次,也就是说Unix信号默认是不排队的。 2.signal函数不同系统不同实现,最好用sigaction(符合POSIX标准)自定义自己的si

qq_40586164的博客 829

TCP/IP网络编程学习笔记(二)

TCP/IP网络编程 第一章 理解网络编程和套接字 1.2 基于Linux的文件操作

ccccccc666的博客 1295

华为顶级网络工程师分享出这份TCP/IP网络编程笔记,已封神

包含了作者在自身经验基础上总结的学习建议,还介绍了网络编程经典书籍。第24章制作HTTP服务器端第25章进阶内容。

知识分享官 282
上一篇: 《TCP/IP网络编程》学习笔记 | Chapter 14:多播与广播
下一篇: 《TCP/IP网络编程》学习笔记 | Chapter 16:关于 I/O 流分离的其他内容
UestcXiye
博客等级 码龄8年 9030粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值