美文网首页
即时通讯

即时通讯

作者: 程序萌 | 来源:发表于2018-05-18 14:49 被阅读0次

    传输控制协议(TCP)

    • TCP 为什么要进行3次握手?
      TCP的三次握手最主要是防止已过期的连接会再次传到被连接的主机;
      如果采用两次的话,会出现下面这种情况。
      比如是A机要连到B机,结果发送的连接信息由于某种原因没有到达B机;
      于是,A机又发了一次,结果这次B收到了,于是就发信息回来,两机就连接。
      传完东西后,断开。
      结果这时候,原先没有到达的连接信息突然又传到了B机,于是B机发信息给A,然后B机就以为和A连上了,这个时候B机就在等待A传东西过去。
    • TCP工作原理
      TCP的连接建立过程又称为TCP三次握手;
      首先发送方主机向接收方主机发起一个建立连接的同步(SYN)请求;
      接收方主机在收到这个请求后向发送方主机回复一个同步/确认(SYN/ACK)应答;
      发送方主机收到此包后再向接收方主机发送一个确认(ACK),此时TCP连接成功建立.
      一旦初始的三次握手完成,在发送和接收主机之间将按顺序发送和确认段。关闭连接之前,TCP使用类似的握手过程验证两个主机是否都完成发送和接收全部数据。
      完成三次握手,客户端与服务器开始传送数据。

    用nc来测试连接
    客户端 nc 127.0.0.1 3000
    服务端 nc -l 3000

    socket:对应一个IP一个端口进行点对点通讯

    1.  导入头文件
    #import <sys/socket.h> //socket相关
    #import <netinet/in.h>  //internet相关
    #import <arpa/inet.h>   //地址解析协议相关
    2. socket(创建)
         int socket(int, int, int);
        /**
         参数
         第一个int:domain:    协议域,AF_INET(IPV4的网络开发)
         第二个int:type:      Socket 类型,  SOCK_STREAM(TCP)/SOCK_DGRAM(UDP,报文)
         第三个int:protocol:  IPPROTO_TCP,协议,如果输入0,可以根据第二个参数,自动选择协议
         返回值
         socket,如果 > 0 就表示成功
         */
    3. connection (连接到“服务器)
        connect(int, const struct sockaddr *, socklen_t)
        /**
         参数
         1> 客户端socket
         2> 指向数据结构sockaddr的指针,其中包括目的端口和IP地址
            服务器的"结构体"地址,C语言没有对象
         3> 结构体数据长度
         返回值
         0 成功/其他 错误代号
         */
    4. write(发送数据)
        send(int, const void *, size_t, int)
        /**
         参数
         1> 客户端socket
         2> 发送内容地址 void * == id
         3> 发送内容长度
         4> 发送方式标志,一般为0
         返回值
         如果成功,则返回发送的字节数,失败则返回SOCKET_ERROR
          */
    5. read (接收)
        recv(int, void *, size_t, int)
        /**
         参数
         第一个int :创建的socket
         void *:接收内容的地址
         size_t:接收内容的长度
         第二个int.:接收数据的标记 0,就是阻塞式,一直等待服务器的数据 
         返回值
         接收到的数据长度
         */
    6. close
        close(int);
        int:就是创建的socket
    

    相关文章

      网友评论

          本文标题:即时通讯

          本文链接:https://www.haomeiwen.com/subject/asygdftx.html