WinSock2绑定错误 我开始制作C++服务器,但我不能绑定到套接字。< /P> #pragma once #include <WinSock2.h> #include <thread> #include "Logging.h" namespace network { static SOCKET sock; static VOID startAccept() { while (true) { struct sockaddr_in serv_addr, cli_addr; int clilen = sizeof(cli_addr); SOCKET accepted; if (accepted == NULL) { accepted = accept(sock, (struct sockaddr *) &cli_addr, &clilen); if (accepted < 0) { core::writeln("Error accept: " + WSAGetLastError()); } else { core::writeln("New connection from " + cli_addr.sin_addr.S_un.S_addr); } } } } static VOID connect(const char* ipAddress, u_short port) { struct sockaddr_in serv_addr, cli_addr; serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(port); sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock < 0) { core::writeln("Error creating socket: " ); perror("error:"); return; } else if (bind(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { core::writeln("Error binding to socket: " ); perror("error:"); return; } else if (listen(sock, 10) < 0) { core::writeln("Error listening socket: "); return; } else { core::writeln("Bound WinSock to " + serv_addr.sin_addr.S_un.S_addr); std::thread accepting(startAccept); accepting.join(); } } };
但每次尝试绑定时,我都会得到以下输出: 绑定到套接字时出错: 错误:没有错误 但是套接字没有绑定。我做错了什么WinSock2绑定错误 我开始制作C++服务器,但我不能绑定到套接字。< /P> #pragma once #include <WinSock2.h> #include <thread> #include "Logging.h" namespace network { static SOCKET sock; static VOID startAccept() { while (true) { struct sockaddr_in serv_addr, cli_addr; int clilen = sizeof(cli_addr); SOCKET accepted; if (accepted == NULL) { accepted = accept(sock, (struct sockaddr *) &cli_addr, &clilen); if (accepted < 0) { core::writeln("Error accept: " + WSAGetLastError()); } else { core::writeln("New connection from " + cli_addr.sin_addr.S_un.S_addr); } } } } static VOID connect(const char* ipAddress, u_short port) { struct sockaddr_in serv_addr, cli_addr; serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(port); sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock < 0) { core::writeln("Error creating socket: " ); perror("error:"); return; } else if (bind(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { core::writeln("Error binding to socket: " ); perror("error:"); return; } else if (listen(sock, 10) < 0) { core::writeln("Error listening socket: "); return; } else { core::writeln("Bound WinSock to " + serv_addr.sin_addr.S_un.S_addr); std::thread accepting(startAccept); accepting.join(); } } };,c++,windows,sockets,winsock2,C++,Windows,Sockets,Winsock2,但每次尝试绑定时,我都会得到以下输出: 绑定到套接字时出错: 错误:没有错误 但是套接字没有绑定。我做错了什么 已修复,必须使用WSAStartup。您的错误报告已中断。您已经找到了WSAGetLastError(),但是您没有始终如一地使用它,使用perror()是不正确的。修复该代码,您现在将看到错误代码10093,wsanotinialised,“要么应用程序没有调用WSAStartup,要么WSAStartup失败”。你没有。WSAGetLastError确实不起作用。所以我试试看。是
已修复,必须使用WSAStartup。您的错误报告已中断。您已经找到了WSAGetLastError(),但是您没有始终如一地使用它,使用perror()是不正确的。修复该代码,您现在将看到错误代码10093,wsanotinialised,“要么应用程序没有调用WSAStartup,要么WSAStartup失败”。你没有。WSAGetLastError确实不起作用。所以我试试看。是的,现在它工作了。谢谢:)WSAGetLastError很好用,perror()不行。使用FormatMessage()将WASGetLastError返回的错误代码转换为字符串。
socket()
成功,无需调用WSAStartup()
?
int _tmain(int argc, _TCHAR* argv[])
{
connect("127.0.0.1", 500);
}