我对网络非常陌生,并且在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