我對網絡非常陌生,並且在while循環中發送消息時遇到問題。Winsock無法在while循環中發送
據我所知,我應該做點什麼沿着此線:
Create Socket()
Connect()
While
Do logic
Send()
End while
Close Socket()
但是每發送一次,並返回-1出現後。
該代碼將僅在循環中創建套接字時起作用。
While
Create Socket()
Connect()
Do logic
Send()
Close Socket()
End while
這裏是我使用的,但不工作的一段代碼:)
//init winsock
WSAStartup(MAKEWORD(2, 0), &wsaData);
//open socket
sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
//connect
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = inet_addr(ipaddress);
serveraddr.sin_port = htons((unsigned short) port);
connect(sock, (struct sockaddr *) &serveraddr, sizeof(serveraddr));
while(true) {
if (send(sock, request.c_str(), request.length(), 0)< 0 /*!= request.length()*/) {
OutputDebugString(TEXT("Failed to send."));
} else {
OutputDebugString(TEXT("Activity sent."));
}
Sleep(30000);
}
//disconnect
closesocket(sock);
//cleanup
WSACleanup();
功能CheckForLastError(返回:10053
WSAECONNABORTED 軟件導致連接中斷。 一個已建立的連接被軟件在您的主機終止,可能是由於數據傳輸超時或協議錯誤
感謝
連接也應該在while循環之外。你能舉出一個你遇到問題的例子嗎? – Default 2013-03-13 11:07:44
我寫了關於winsock [這裏](http://stackoverflow.com/a/2920787/238902「C++ Winsock P2P」)的廣泛答案。這可能有一些幫助? – Default 2013-03-13 11:09:15
正確的方法是你的第一個例子,它只發送一次,然後返回一個錯誤。你應該調用[WSAGetLastError](http://msdn.microsoft.com/en-us/library/windows/desktop/ms741580%28v=vs.85%29.aspx)來得到那個錯誤,這應該給你一個提示至於爲什麼它失敗。你的第二個例子僅僅是因爲你是第一個例子_repeating;創建套接字,連接,發送,關閉套接字,回到第一步。 – 2013-03-13 11:27:00