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