c++ - 包括通过套接字监听的线程中断

标签 c++ multithreading sockets

我在 Microsoft MSDN 的帮助下编写了一个服务器...

它与我的客户端完美配合,连接和一切,但是当我添加 -

#include <thread>

只是我的项目中的这一行,它使服务器停止工作(绑定(bind)/监听时总是得到无效的套接字)...

这是我的代码:

SOCKET Connect_To_Client()
{
     // Initialize Winsock.
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);

int count = 0;
while (iResult != NO_ERROR) 
{
    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    count++;

    if (count == 3)
    {
        MessageBox(NULL, "WSA Startup failed!", "ERROR", MB_OK);
        return -1;
    }


}

// Create a SOCKET for listening for incoming connection requests.
SOCKET ListenSocket;
ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

count = 0;
while (ListenSocket == INVALID_SOCKET) 
{
    ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    count++;

    if (count == 3)
    {
        MessageBox(NULL, "Error in Listening Socket!", "ERROR", MB_OK);
        closesocket(ListenSocket);
        WSACleanup();
        return -1;
    }
}

//ADDR
sockaddr_in service;
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr(DEFAULT_IP);
service.sin_port = htons(DEFAULT_PORT);

count = 0;
bind(ListenSocket, (SOCKADDR *) & service, sizeof (service));

// Listen for incoming connection requests on the created socket
count = 0;
cout << "Listening..." << endl;
while (listen(ListenSocket, 1) == SOCKET_ERROR) 
{
    count++;

    if (count == 3)
    {
        MessageBox(NULL, "Error listening!", "ERROR", MB_OK);
        closesocket(ListenSocket);
        WSACleanup();
        return -1;
    }
}

SOCKET AcceptSocket; // Create a SOCKET for accepting incoming requests.

// Accept the connection.
AcceptSocket = accept(ListenSocket, NULL, NULL);

count = 0;
while(AcceptSocket == INVALID_SOCKET) 
{
    AcceptSocket = accept(ListenSocket, NULL, NULL);
    count++;

    if (count == 3)
    {
        MessageBox(NULL, "Error Connecting", "ERROR", MB_OK);
        closesocket(ListenSocket);
        WSACleanup();
        return -1;
    }
}

cout << "Connected!" << endl;
return AcceptSocket;
}

如果我有 #include <thread>它不工作(无效套接字),如果我不工作,它工作得很好.. 我做错了什么?

谢谢!

最佳答案

<thread> 中没有任何内容这应该以任何方式影响 winsock API。但以防万一,您需要预编译代码并查看预编译器的输出,或者使用调试器单步执行代码,并确保所有变量和函数参数都具有您期望的正确值。

关于c++ - 包括通过套接字监听的线程中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19692738/

相关文章:

c++ - 在 OpenCV 中将灰度图像转换为单色

multithreading - 玩 Scala 和线程安全

c# - 干净的调用模式?

c# - ReceiveFromAsync 示例

c++ - 通过 poco 流套接字发送文件

c++ - 我应该使用什么设计模式来避免此处出现伪代码?

C++ 质量-#include

c++ - C++ 中货币之间转换的程序出现问题

c++ - 如何安全地删除 C++ 中的 posix 计时器?

sql-server - SYN 收到 RST,ACK 非常频繁