我希望客户机程序(TCP)准备好在服务器开始接受()传入连接时连接到服务器程序(客户机程序应始终保持运行,服务器程序可以随时开始或结束)。客户端代码如下所示:无法断开连接并重新连接套接字(C++,winsock2)
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)循环中再次等待,直到服务器再次启动并接受()连接,但它不连接到服务器和WSAGetLastError()返回10056,表示套接字已连接(为什么?)。我听说在套接字上调用closesocket()之后你不能重新连接客户端,所以我试图在重新连接之前断开连接,通过向while(1)循环中添加shutdown(socket,SD_SEND),但这也不起作用。
除了重复等待客户端程序结束并重新启动它之外,还有什么可以做的吗?有什么方法可以断开客户端与服务器程序的连接,以便客户端可以稍后重新连接?
什么?关闭插座! '我听说你在socket上调用closesocket()后不能重新连接客户端 - 你听到了什么? – 2014-09-29 10:31:12
当服务器程序结束时,它是否关闭连接的结束?它应该做的。 – 2014-09-29 10:34:28
@MartinJames它不关闭连接._。无论等待多久,它总是会返回10056 ... – 2014-09-29 11:52:29