糖儿飞教你学C++ Socket网络编程——5.2 TCP通信程序的函数及流程总结

TCP服务器端程序流程

监听套接字=socket(AF_INET, 套接字的类型, 0)

bind(监听套接字, 本地地址, 地址长度)

通信套接字=accept(监听套接字, 对方地址, 地址长度的指针)

listen(监听套接字, 等待连接的最大个数)

while(1){

recv(通信套接字,接收缓冲区,接收缓冲区的长度,0)

 send(通信套接字,发送缓冲区,发送数据的长度,0)

}

closesocket(套接字)

TCP客户端程序流程

通信套接字=socket(AF_INET, 套接字的类型, 0)

connect (通信套接字, 对方地址, 地址长度)

while(1){

send(通信套接字,发送缓冲区,发送数据的长度,0)

 recv(通信套接字,接收缓冲区,接收缓冲区的长度,0)

}

closesocket(套接字)

套接字函数的参数总结

① bindacceptconnect 三个函数的参数具有相似性

bind(监听套接字, 本地地址, 地址长度)

通信套接字=accept(监听套接字, 对方地址, 地址长度的指针)

vconnect (通信套接字, 对方地址, 地址长度)

sendrecv两个函数的参数具有相似性

send(通信套接字,发送缓冲区,发送数据的长度,0)

recv(通信套接字,接收缓冲区,接收缓冲区的长度,0)

注意:

closesocket()关闭套接字将导致TCP连接断开,而TCP断开连接采用四次握手机制,也会向对方发送数据包(但这种数据包只有包头,内容为空),这时会触发对方recv()函数的执行。

WinSock中的函数都是全局函数,因此也可在这些函数前加::,例如::bind()::listen()::accept()等,因为::运算符左边是类名,如果不属于任何类,则::左边为空。

send()函数所做的工作仅仅是将要发送的数据从应用程序缓冲区中复制到套接字的发送缓冲区

recv()函数接收数据时,其所做的工作也仅仅是将套接字的接收缓存中的数据复制到应用程序接收缓存中

猜你喜欢

转载自blog.csdn.net/wuxia2118/article/details/88850348