Не могу поставить Accept () (CSocket) в свой собственный поток - PullRequest
0 голосов
/ 11 апреля 2019

Я использую блокировку сервера-клиента для выполнения домашней работы по 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;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...