[英]socket not creating win32 c++
我正在创建一个套接字。 它很容易作品第一次的话,我停止套接字,并重新生成它给我的错误
class MainServer{
private:
SOCKET soo;
public:
// I have Basically Created Server Socket in this Function
// And passed it
SOCKET socket_control_mob(){
struct sockaddr_in server;
WSADATA wsa;
printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
printf("Failed. Error Code : %d", WSAGetLastError());
MessageBox(NULL, TEXT("Failed"), L"Failed", NULL);
soo = NULL;
return soo;
}
printf("Initialised.\n");
//MessageBox(NULL, TEXT("Initialised"), L"Simple Message", NULL);
//Create a socket
if ((soo = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
printf("Could not create socket : %d", WSAGetLastError());
MessageBox(NULL, TEXT("Socket Not Created1"), L"Failed", NULL);
soo = NULL;
return soo;
}
printf("Socket created.\n");
//Prepare the sockaddr_in structure
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(8890);
//Bind
if (bind(soo, (struct sockaddr *)&server, sizeof(server)) == SOCKET_ERROR)
{
printf("Bind failed with error code : %d", WSAGetLastError());
MessageBox(NULL, TEXT("Binding Error"), L"Failed", NULL);
soo = NULL;
return soo;
}
puts("Bind done");
//MessageBox(NULL, TEXT("Bind Done"), L"Simple Message", NULL);
return soo;
}
bool server_close_socket(){
closesocket(soo);
WSACleanup();
return true;
}
};
我通过调用创建了一个套接字
MainServer s;
s.socket_control_mob()
我已经停止了套接字
s.server_close_socket()
套接字在停止后未创建
您在处理套接字,甚至在WinSock库本身都有错误。 尝试类似这样的方法:
class MainServer
{
private:
SOCKET soo;
bool init;
public:
MainServer()
: soo(INVALID_SOCKET), init(false)
{
WSADATA wsa;
printf("\nInitialising Winsock...");
int err = WSAStartup(MAKEWORD(2, 2), &wsa);
if (err != 0)
{
printf("Failed. Error Code : %d\n", err);
MessageBox(NULL, L"WSAStartup Failed", L"Failed", NULL);
}
else
{
init = true;
printf("Initialized.\n");
//MessageBox(NULL, L"Initialized", L"Simple Message", NULL);
}
}
~MainServer()
{
close_server_socket();
if (init)
WSACleanup();
}
SOCKET socket_control_mob()
{
struct sockaddr_in server = {0};
close_server_socket();
//Create a socket
soo = socket(AF_INET, SOCK_STREAM, 0);
if (soo == INVALID_SOCKET)
{
printf("Could not create socket. Error Code : %d\n", WSAGetLastError());
MessageBox(NULL, L"Socket Not Created", L"socket Failed", NULL);
return INVALID_SOCKET;
}
printf("Socket created.\n");
//Prepare the sockaddr_in structure
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(8890);
//Bind
if (bind(soo, (struct sockaddr *)&server, sizeof(server)) == SOCKET_ERROR)
{
printf("Bind failed. Error Code : %d", WSAGetLastError());
MessageBox(NULL, L"Binding Error", L"bind Failed", NULL);
close_server_socket();
return INVALID_SOCKET;
}
printf("Bind done.\n");
//MessageBox(NULL, L"Bind Done", L"Simple Message", NULL);
return soo;
}
void server_close_socket()
{
if (soo != INVALID_SOCKET)
{
closesocket(soo);
soo = INVALID_SOCKET;
}
}
};
这是众所周知的事情。 您创建的套接字处于FIN_WAIT状态。 为避免此问题,请等待2分钟,然后重新运行该程序,遵循“正常关机”协议或为套接字提供SO_REUSEADDR选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.