每当服务器开始接受()传入连接时,我希望客户端程序(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)来断开客户端连接,但这不起作用
除了重复等待客户端程序结束并再次启动之外,还有什么我可以做的吗?有没有办法断开客户端与服务器程序的连接,以便客户端可以在以后重新连接?
答案 0 :(得分:1)
您的应用程序逻辑存在严重问题。您不需要重新连接已连接的套接字;您无法重新连接已连接的套接字;除非您正在探索Windows API的一个远程角落,否则无法重新连接已关闭的套接字。