六安品牌网站建设怎么样,wordpress好用的排版,常州做网站优化,网站关键词百度没有收录一、主机字节序列和网络字节序列
主机字节序列分为大端字节序列和小端字节序列#xff0c;不同的主机采用的字节序列可能不同。大端字节序列是指一个整数的高位字节存储在内存的低地址处#xff0c;低位字节存储在内存的高地址处。小端字节序列是指整数的高位字节存储在内存…一、主机字节序列和网络字节序列
主机字节序列分为大端字节序列和小端字节序列不同的主机采用的字节序列可能不同。大端字节序列是指一个整数的高位字节存储在内存的低地址处低位字节存储在内存的高地址处。小端字节序列是指整数的高位字节存储在内存的高地址处低位字节存储在内存的低地址处。在两台使用不同字节序列的主机之间传递数据时可能会出现冲突。所以在将数据发送到网络时规定整型数据使用大端字节序列所以也把大端字节序列称为网络字节序列。对方接收到数据后可以根据自己的字节序列转换。
Linux系统提供如下4个函数来完成主机字节序列和网络字节序列的转换 二、套接字的地址结构
1.通用socket地址结构
socket网络编程接口中表示socket地址的是结构体sockaddr定义如下
#includebits/socket.hstruct sockaddr
{sa_famliy_t sa_family;char sa_data[14];
}sa_family成员是地址族sa_famliy_t类型的变量。地址族类型通常与协议族类型对应。常见的协议族和对应的地址族如下图所示 2.专用socket地址结构
TCP/IP协议族有sockaddr_in和sockaddr_in6两个专用的socket地址结构它们分别用于IPV4和IPV6一般使用sockaddr_in
结构体sockaddr_in它用来处理网络通信的地址是internet环境下套接字的地址形式。 所以在网络编程中我们会对sockaddr_in结构体进行操作使用sockaddr_in来建立所需的信息最后使用类型转化就可以了。sockaddr_in用于socket定义和赋值。
struct sockaddr_in
{sa_family_t sin_family;//地址族 AF_INET u_int16_t sin_port;//端口号需要用网络字节序表示struct in_addr sin_addr;//IPV4地址结构体
}该结构体中提到的另一个结构体 in_addr 的定义如下
struct in_sddr
{u_int32_t s_addr;//以网络字节序列表示IPV4地址
}它用来表示一个32位的IPv4地址。 in_addr_t 一般为 32位的unsigned int其字节顺序为网络顺序即该无符号整数采用大端字节序 。
3.IP地址转换函数
通常人们习惯用点分十进制字符串表示IPV4地址但编程中我们需要先把它们转化为整数方能使用下面函数可用于点分十进制字符串表示的IPV4地址和网络字节序整数表示的IPV4地址之间的转换 三、网络编程接口
1.socket()创建套接字 参数解释
第一个参数domain设置套接字的协议簇 AF_UNIX AF_INET AF_INET6。 第二个参数type设置套接字的服务类型SOCK_STREAM流式套接字、SOCK_DGRAM数据报格式套接字。 第三个参数protocol一般设置为0表示使用默认协议 返回值创建成功返回套接字的文件描述符失败返回-1 。
2.bind()服务端把用于通信的地址和端口绑定到 socket 上
参数解释
第一个参数sockfd需要绑定的socket描述符。 第二个参数addr地址结构存放了服务端用于通信的地址和端口。 第三个参数addrlen表示 addr 结构体的大小即socket地址的长度。 返回值成功返回0失败返回-1。
3.listen()创建一个监听队列以存储待处理的客户连接 参数解释
第一个参数sockfd被监听的socket套接字。 第二个参数backlog表示处于完全连接状态的socket的上限。 返回值成功返回0失败返回-1。
4.accept()从listen监听队列中接收一个连接 参数解释
第一个参数sockfd是执行过listen系统调用的监听socket 。 第二个参数addr参数用来获取被接受连接的远端socket地址。 第三个参数addrlen指定该socket地址的长度。 返回值成功返回一个新的连接socket该socket唯一地标识了被接收的这个连接失败返回-1 。
5.connect()客户端需要通过此系统调用来主动与服务器建立连接 参数解释
第一个参数sockfd由socket()返回的一个socket。 第二个参数serv_addr服务器监听的socket地址。 第三个参数addrlen指定这个地址的长度。 返回值成功返回0失败返回-1。
6.recv()读取sockfd上的数据TCP读取数据
参数解释
第一个参数sockfd已连接stocket的描述符。 第二个参数buff指定读缓冲区的位置。 第三个参数len指定读缓冲区的大小。 第四个参数flags为数据收发提供了额外的控制。
7.send()往socket上写入数据TCP写入数据 参数解释
第一个参数sockfd已连接stocket的描述符。 第二个参数buff指定读缓冲区的位置。 第三个参数len指定读缓冲区的数据长度。 第四个参数flags为数据收发提供了额外的控制。
8.close()关闭一个连接 参数解释
参数sockfd关闭该连接对应的socket。