0
6次迭代後,發送返回-1又名SOCKET_ERROR。我試着加入了休眠功能,因此將通過循環再等待一秒鐘,但說得那麼它只會重複2次。什麼導致了這個錯誤?的WinSock2送返回SOCKET_ERROR 6之後循環迭代...爲什麼?
#pragma comment(lib, "ws2_32.lib")
#include <iostream>
#include <windows.h>
void main()
{
int reqVersion = 2;
WSADATA wsaData;
if (WSAStartup(MAKEWORD(reqVersion,0), &wsaData)==0)
{
// Check if major version is at least reqVersion
if (LOBYTE(wsaData.wVersion) >= reqVersion)
{
SOCKADDR_IN addr;
int addrlen = sizeof(addr);
SOCKET sListen;
SOCKET sConnect;
sConnect = socket(AF_INET, SOCK_STREAM, NULL);
addr.sin_addr.s_addr = inet_addr("192.168.0.7");
addr.sin_family = AF_INET;
addr.sin_port = htons(1234);
if(connect(sConnect, (SOCKADDR*)&addr, sizeof(addr)) == 0)
{
char message[10] = "Hellooooo";
for(int i = 0; i <50; i++)
{
int sendOutcome = send(sConnect, message, sizeof(message), 0);
if(sendOutcome == SOCKET_ERROR)
{
std::cout << "Socket Error..." << std::endl;
}
else
{
std::cout << "SENT..." << std::endl;
}
Sleep(1000);
}
}
else
{
std::cout << "Not Connected..." << std::endl;
}
}
else
{
std::cout << "Required version not available..." << std::endl;
}
// Cleanup winsock
if (WSACleanup()!=0)
{
std::cout << "Cleanup failed..." << std::endl;
}
}
else
{
std::cout << "Startup failed..." << std::endl;
}
system("PAUSE");
}
什麼[Winsock錯誤](http://msdn.microsoft.com/en-us/library/ms740668(v = vs.85)的.aspx)你收到? – sarnold 2011-05-17 01:45:20
我的意思是send函數正在返回SOCKET_ERROR常量,該常量被定義爲-1。 – Matthew 2011-05-17 02:23:53
是的,這個小錯誤隱藏了很多_can_出錯的大部分:當函數返回_時,大多數Windows套接字2函數不返回錯誤的具體原因。因此,使用'WSAGetLastError'來找出[Winsock錯誤](http://msdn.microsoft.com/en-us/library/ms740668(v = vs.85).aspx)是什麼。 – sarnold 2011-05-17 02:28:01