我希望客戶機程序(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