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(套接字)
套接字函数的参数总结
① bind、accept、connect 三个函数的参数具有相似性
bind(监听套接字, 本地地址, 地址长度)
通信套接字=accept(监听套接字, 对方地址, 地址长度的指针)
vconnect (通信套接字, 对方地址, 地址长度)
②send和recv两个函数的参数具有相似性
send(通信套接字,发送缓冲区,发送数据的长度,0)
recv(通信套接字,接收缓冲区,接收缓冲区的长度,0)
注意:
用closesocket()关闭套接字将导致TCP连接断开,而TCP断开连接采用四次握手机制,也会向对方发送数据包(但这种数据包只有包头,内容为空),这时会触发对方recv()函数的执行。
WinSock中的函数都是全局函数,因此也可在这些函数前加“::”,例如::bind()、::listen()、::accept()等,因为“::”运算符左边是类名,如果不属于任何类,则“::”左边为空。
send()函数所做的工作仅仅是将要发送的数据从应用程序缓冲区中复制到套接字的发送缓冲区;
recv()函数接收数据时,其所做的工作也仅仅是将套接字的接收缓存中的数据复制到应用程序接收缓存中。