套接字网络编程学习笔记

1.发送方需要调用htons()或htonl()对发送的数据转序,接收方在从套接字缓冲区中读取数据之后,要调用ntohs()函数或ntohl()对接收到的数据进行转序,字符型数据除外,因为字符占一个字节,字节序指的是多字节数据的存储或发送顺序。

2.tcp程序的端口号与udp程序的端口号是独立的,比如100号端口可以同时被一个udp程序和tcp程序使用,但两个udp程序不能同时使用一个端口号,tcp也是如此

3.编写自己的头文件,包括导入库文件,制作包裹函数

4.包裹函数:调用一个函数之后要通过其返回值查看函数调用是否成功,若没有成功则调用err_sys()函数输出错误原因

5.全局变量error:系统定义的全局变量,当调用函数出错时,系统将错误类型宏复制给err

6.每个tcp套接字都有一个发送缓冲区,udp套接字没有发送缓冲区,tcp套接字之所以有发送缓冲区是为了实现可靠传输,对tcp阻塞套接字调用write时,若发送缓冲区的大小小于写入量,write会阻塞,直到数据分批写入完才返回,write成功返回只能说明已把数据成功写入套接字缓冲区,不代表对方成功接收到数据,可以改变套接字缓冲区大小

7.套接字地址结构

ipv4套接字地址结构:struct sockaddr_in ,常用成员变量sin_family,sin_port,sin_addr

端口号以网络字节序形式存储,ip地址以二进制网络字节序存储

当以套接字地址结构做为函数参数时,需要进行强制类型转换,将各种协议族的套接字地址结构都强制转换成通用套接字地址结构struct sockaddr

8.对tcp套接字调用read与write

tcp套接字有输入输出缓冲区,缓冲区的大小是一定的

当调用write时:对于阻塞式tcp套接字,write会在将数据全部写入输出缓冲区后返回

对于非阻塞式tcp套接字,write会立即返回,写入量与输出缓冲区剩余空间大小有关,这就要求再次调用write,直到把数据都写入到输出缓冲区

当调用read时:

原文地址:https://www.cnblogs.com/adelep/p/6062467.html