Sockets WinSock2发送在6次循环迭代后返回套接字错误。。。为什么?
经过6次迭代后,send返回-1 aka SOCKET_错误。我尝试添加一个sleep函数,以便它在再次循环之前等待一秒钟,但这使得它只能重复2次。是什么导致了这个错误Sockets WinSock2发送在6次循环迭代后返回套接字错误。。。为什么?,sockets,visual-c++,client,winsock,winsock2,Sockets,Visual C++,Client,Winsock,Winsock2,经过6次迭代后,send返回-1 aka SOCKET_错误。我尝试添加一个sleep函数,以便它在再次循环之前等待一秒钟,但这使得它只能重复2次。是什么导致了这个错误 #pragma comment(lib, "ws2_32.lib") #include <iostream> #include <windows.h> void main () { int reqVersion = 2; WSAD
#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");
}
#pragma注释(lib,“ws2_32.lib”)
#包括
#包括
空干管()
{
内部需求版本=2;
WSADATA WSADATA;
if(WSAStartup(MAKEWORD(reqVersion,0),&wsaData)==0)
{
//检查主版本是否至少为reqVersion
if(LOBYTE(wsaData.wVersion)>=reqVersion)
{
地址中的SOCKADDR_;
int addrlen=sizeof(addr);
套筒滑脱;
插座连接;
sConnect=socket(AF\u INET,SOCK\u STREAM,NULL);
addr.sin_addr.s_addr=inet_addr(“192.168.0.7”);
addr.sin_family=AF_INET;
地址:sin_端口=htons(1234);
if(connect(sConnect,(SOCKADDR*)&addr,sizeof(addr))=0
{
字符消息[10]=“你好”;
对于(inti=0;i,正如sarnold的评论所建议的那样,获得实际误差总是很有用的
通常,检查错误的套接字代码将在通过检查socket\u错误
返回值检测问题的代码之后调用WSAGetLastError()
从WSAGetLastError()
中获得的错误代码非常重要,您通常可以在了解问题的含义后对其进行推理
您可以使用显示此错误代码的文本,也可以在WinError.h标题中手动查找
在本例中,10053是WSAECONNABORTED
,其错误文本显示“已建立的连接已被主机中的软件中止。”
因此,我假设您所连接的服务器出于某种原因正在中止连接。如果看不到服务器源代码,很难知道为什么会这样。您收到了什么?我的意思是发送函数正在返回SOCKET\u ERROR常量,该常量定义为-1。是的,这个小错误隐藏了great大量可能出错的内容:大多数Windows Sockets 2函数在返回时不会返回导致错误的具体原因。因此,请使用WSAGetLastError
了解错误原因。很酷,这让我们知道连接至少已建立并连接了一段时间;您也可以粘贴服务器代码吗?