TCP通信原理
TCP是面向链接的,字节流的流式传输方法。
TCP通信接口
TCP通信接口如下
socket创建
socket创建
参数在udp编程中已经介绍过。
而在TCP服务端,使用socket接口创建的sokcetfd被成为listensocket,用来监听客户端发送的链接信息,不会被用于通信。
bind本地端口和地址
bind绑定本地的端口和地址
参数在udp编程中已经介绍过。
同样在服务端需要主动绑定,客户端不用也不能主动绑定。
connect链接
由客户端需要发起链接
从socketfd中,向服务端发送链接
参数1:是socketfd,代表客户端从某个socketfd中发送链接。
参数2:传入服务端的sockaddr_in。
参数3:服务端的sockaddr_in的大小。
retv:如果链接成功,返回0,失败返回-1。
listen监听
由服务端监听客户端的connect链接
从socketfd(listensocket)中,监听客户端发送的链接,第二个参数较为复杂这里不予介绍。
ret:如果成功,则返回0,否则返回-1。
accept接收
由服务端从listensocket中接收客户端发送的链接请求
从socketfd中,得到远端的sockaddr_in。
参数1:接收listensocket,从listensocket中接收到客户端的链接请求。
参数2:得到远端的sockaddr_in,该参数为输出型参数。
参数3:得到远端的sockaddr_in的大小,该参数为输出型参数,在传入该参数前,需要先求出外部的sockaddr_in的大小。
retv:返回一个sockfd,该sockfd才是真正的,接收发送信息的sockfd。
发送和接收接口
在TCP中,发送和接收接口和udp中不同
接收接口如下
参数1:接收一个收发数据的sockfd。
参数2:接收一个缓冲区buffer,将sockfd中的内容拷贝到buffer中。
参数3:接收到的参数长度。
参数4:一般传0。
retv:返回接收到的字节个数,如果小于0,则代表接收失败。
发送接口如下
参数1:从某个sockfd中发送数据。
参数2:接收一个缓冲区,发送缓冲区内的内容。
参数3:发送内容的有效长度。
参数4:一般传0。
retv:返回发送的字节个数,如果小于0,则代表发送失败。