无法断开连接并重新连接套接字(C ++,winsock2)

时间:2014-09-29 10:14:58

标签: c++ windows sockets tcp winsock2

每当服务器开始接受()传入连接时,我希望客户端程序(TCP)准备连接到服务器程序(客户端程序应始终保持运行,并且服务器程序可以随时启动或结束)。客户端代码如下所示:

while (1) {

    //Wait for the server to accept the connection:
    while (connect(socket,(sockaddr*)&addr,sizeof(addr))!=0) {cout<<WSAGetLastError()<<endl;}

    //Send whatever data...

}

在第一次执行while(1)循环时,一切都按预期运行;当客户端连接到服务器时,它会发送所有数据,并且服务器程序结束。然后我希望客户端在while(connect(...,...,...)!= 0)循环再次等待,直到服务器再次启动并接受()sa连接,但它没有连接到server和WSAGetLastError()返回10056,表明套接字已经连接(为什么?)。我听说在调用套接字上的closesocket()之后你无法重新连接客户端,所以我尝试在重新连接之前通过向while(1)循环添加shutdown(socket,SD_SEND)来断开客户端连接,但这不起作用

除了重复等待客户端程序结束并再次启动之外,还有什么我可以做的吗?有没有办法断开客户端与服务器程序的连接,以便客户端可以在以后重新连接?

1 个答案:

答案 0 :(得分:1)

您的应用程序逻辑存在严重问题。您不需要重新连接已连接的套接字;您无法重新连接已连接的套接字;除非您正在探索Windows API的一个远程角落,否则无法重新连接已关闭的套接字。