C++ winsock服务器不接受连接
我有一个简单的TCP服务器应用程序,不接受任何连接。 它目前使用vs 2019构建,但最初(不久前)使用vs 2012构建。 原始版本可以工作,但2019版永远无法接受。 我可以调查哪些方面? 我没有访问客户端代码的权限。 这是我的服务器代码C++ winsock服务器不接受连接,c++,winsock,C++,Winsock,我有一个简单的TCP服务器应用程序,不接受任何连接。 它目前使用vs 2019构建,但最初(不久前)使用vs 2012构建。 原始版本可以工作,但2019版永远无法接受。 我可以调查哪些方面? 我没有访问客户端代码的权限。 这是我的服务器代码 int iResult; WSADATA wsaData; // Initialize Winsock iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResul
int iResult;
WSADATA wsaData;
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed: %d\n", iResult);
return 1;
}
#define DEFAULT_PORT "8082"
struct addrinfo* result = NULL, * ptr = NULL, hints;
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
// Resolve the local address and port to be used by the server
iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
if (iResult != 0) {
printf("getaddrinfo failed: %d\n", iResult);
WSACleanup();
return 1;
}
SOCKET ListenSocket = INVALID_SOCKET;
ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
if (ListenSocket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
freeaddrinfo(result);
WSACleanup();
return 1;
}
iResult = bind(ListenSocket, result->ai_addr, (int)result->ai_addrlen);
if (iResult == SOCKET_ERROR) {
printf("bind failed with error: %d\n", WSAGetLastError());
freeaddrinfo(result);
closesocket(ListenSocket);
WSACleanup();
return 1;
}
printf("bound\n");
if (listen(ListenSocket, SOMAXCONN) == SOCKET_ERROR) {
printf("Listen failed with error: %ld\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
}
SOCKET ClientSocket;
ClientSocket = INVALID_SOCKET;
// Accept a client socket
ClientSocket = accept(ListenSocket, NULL, NULL);
if (ClientSocket == INVALID_SOCKET) {
printf("accept failed: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
}
printf("connected\n");
这是wireshark的输出
这是来自netsat的
找到了问题
是防火墙停止了连接请求您是否收到任何错误,如果是,是什么?您绑定到什么地址和端口?没有错误-只需等待connection@Gunner显示的代码很好,只要打开侦听套接字并接受其上的连接即可。问题在于客户端没有连接到正确的IP/端口。另一方面,此代码仅创建1个侦听套接字,但
getaddrinfo()
返回地址的链接列表,因此链接列表可能包含多个本地IP地址(您没有检查这些地址),并且客户端正试图连接到您根本没有创建侦听套接字的IP。netstat
的输出实际上说了什么,Wireshark实际显示了什么?@o_weisman永远不会得到连接的是接受