赞
踩
书接上回《CAPL如何使用socket套接字实现TCP通信(数据传输)》,当TCP通信一方数据传输完成后,没有再发送数据的必要时,就可以调用tcpClose()接口主动发起断开连接的请求。断开连接后会释放套接字所占的资源,但不代表套接字会自动赋值为无效值,所以需要手动赋值为无效值。
tcpClose(clientSocket);
clientSocket = INVALID_SOCKET;
我们知道:连接请求一般由client发起,断开连接的话client或server都可以。只要你认为你不会再有数据要发送了,你就可以发起断开连接的请求。
一方发起断开连接的请求后,另一方TCP收到断开连接请求时首先自动回复一个ACK确认报文,然后通过回调函数OnTcpClose()通知应用层收到断开连接的请求。
我们在TCP四次挥手机制时讲过,为什么是四次挥手而不是三次?因为接收方收到断开连接请求时,需要确保自己的数据发送完,才能发起自己的断开连接请求。
void OnTcpClose(dword socket, long result)
{
if (result != 0)
return;
if (socket == serverDataSocekt)
{
tcpSend(socket, "Hello", 5);
tcpClose(serverDataSocekt);
serverDataSocket = INVALID_SOCKET;
}
}
当获取到断开连接的请求后,把自己的数据该发送的发送完,就可以调用tcpClose(),断开自己这一侧的连接了。这才是一个完整的断开连接的过程。
但是,但是
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。