当前位置:   article > 正文

CAPL如何使用socket套接字实现TCP通信(断开连接)_socket套接字断开连接

socket套接字断开连接

书接上回《CAPL如何使用socket套接字实现TCP通信(数据传输)》,当TCP通信一方数据传输完成后,没有再发送数据的必要时,就可以调用tcpClose()接口主动发起断开连接的请求。断开连接后会释放套接字所占的资源,但不代表套接字会自动赋值为无效值,所以需要手动赋值为无效值。

  tcpClose(clientSocket);
  clientSocket = INVALID_SOCKET;
  • 1
  • 2

我们知道:连接请求一般由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;
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

当获取到断开连接的请求后,把自己的数据该发送的发送完,就可以调用tcpClose(),断开自己这一侧的连接了。这才是一个完整的断开连接的过程。

但是,但是

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/730295
推荐阅读
相关标签
  

闽ICP备14008679号