无法将Accept()(CSocket)放入其自己的线程中

时间:2019-04-11 12:17:53

标签: c++ sockets

我使用阻止服务器-客户端来完成FTP作业。 但是当尝试将Accept放入线程时,我被卡住了。 (每次我运行CServer时,它都会崩溃并关闭) 任何人都知道答案或可以建议我其他。对此,我真的非常感激。

我真的很想使用阻塞和CSocket,所以不要建议我不要阻塞 我也查看了p_thread,但是我的代码仍然可以工作

void CServerDlg::OnBnClickedListen()
{
    // TODO: Add your control notification handler code here
    if (listen.Create(PORT, SOCK_STREAM, _T("127.0.0.1")) == 0) {
        showMessage("Failed to init socket");
        listen.GetLastError();
        return;
    }
    else {
        if (listen.Listen(1) == FALSE) {
            showMessage("Can't listen to the port");
            listen.Close();
            return;
        }

    }
    connectThread = thread(&CServerDlg::ThreadMain, this);

}


void CServerDlg::ThreadMain() {

    int cnt = -1;
    CSocket* client;

    while (1)
    {
        client = new CSocket();

        if (listen.Accept(*client)) // it crashes everytime i got here
        {
            cnt++;
            char * id = Converter::StringToChar(Converter::NumberToString(*client));
            clients.push_back(client);
            ClientId.push_back(id);

            showMessage("Found a connection with client " + Converter::CharToString(id));

            /*
                 Thread here
            */
           threads.push_back(thread(&CServerDlg::ThreadProc, this, cnt));
        }
        else break;
    }

}

0 个答案:

没有答案