我有一个关于使用C ++在C ++中使用FTP的FTP作业。我使用基于Mfc对话框的接口作为我的应用程序的接口。使用多线程处理多客户端(1个服务器-许多客户端)。我使用一个名为“ Listen”的按钮。每当我按下该按钮时,服务器就会开始监听。但是这里的问题是,我将Accecpt放入一个循环中以处理多客户端(每个客户端将进入单独的线程),但是现在我无法随时关闭服务器对话框。它永远卡在“监听”按钮中你能给我一些建议使其工作吗?我自己做了一些研究。我尝试了一些技巧但没有用。 谢谢。
请不要告诉我有关选择或轮询的信息,我使用的是Windows,而不是Linux。 我想保留CSocket,而不是Winsock。我试图在另一个线程中关闭监听,但是没有用。
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;
}
}
int cnt = -1;
CSocket* client;
while (1)
{
client = new CSocket();
if (listen.Accept(*client))
{
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;
}
listen.Close();
for (int i = 0; i < clients.size(); i++)
{
if (clients[i] != NULL)
{
clients[i]->Close();
}
}
clients.clear();
}
```
void CServerDlg::OnBnClickedCancel()
{
// TODO: Add your control notification handler code here
// i want every time i click 'cancel; button theaplcaton will clsoe
}
```