1、开发流程图
2、socket中TCP的三次握手建设连贯详解
咱们晓得tcp建设连贯要进行“三次握手”,即替换三个分组。大抵流程如下:
客户端向服务器发送一个SYN J服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1客户端再想服务器发一个确认ACK K+1
只有就完了三次握手,然而这个三次握手产生在socket的那几个函数中呢?请看下图:
image
图1、socket中发送的TCP三次握手
从图中能够看出,当客户端调用connect时,触发了连贯申请,向服务器发送了SYN J包,这时connect进入阻塞状态;服务器监听到连贯申请,即收到SYN J包,调用accept函数接管申请向客户端发送SYN K ,ACK J+1,这时accept进入阻塞状态;客户端收到服务器的SYN K ,ACK J+1之后,这时connect返回,并对SYN K进行确认;服务器收到ACK K+1时,accept返回,至此三次握手结束,连贯建设。
3、网络字节序与主机字节序
主机字节序就是咱们平时说的大端和小端模式:不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保留的程序,这个叫做主机序。援用规范的Big-Endian和Little-Endian的定义如下:
a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
网络字节序:4个字节的32 bit值以上面的秩序传输:首先是0~7bit,其次8~15bit,而后16~23bit,最初是24~31bit。这种传输秩序称作大端字节序。因为TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种秩序,因而它又称作网络字节序。字节序,顾名思义字节的程序,就是大于一个字节类型的数据在内存中的寄存程序,一个字节的数据没有程序的问题了。
所以:在将一个地址绑定到socket的时候,请先将主机字节序转换成为网络字节序,而不要假设主机字节序跟网络字节序一样应用的是Big-Endian。因为这个问题曾引发过血案!公司我的项目代码中因为存在这个问题,导致了很多莫名其妙的问题,所以请谨记对主机字节序不要做任何假设,务必将其转化为网络字节序再赋给socket。