-2
我有一個問題如何發送一個字符串到客戶端在同一時間。我的程序把客戶端放到隊列中,所以當第一個客戶端斷開第二個連接時,我真的想把它們放在多線程中,但我不知道如何,任何人都可以幫助我,謝謝。多線程客戶端服務器編程在c + +窗口
void abc(CSocket sockClients[],int i)
{
int MsgSize;
char *temp;
// Nhan username tu Server
sockClients[i].Receive((char*)&MsgSize,sizeof(int),0); // Neu nhan loi thi tra ve la SOCKET_ERROR.
temp = new char[MsgSize +1];
sockClients[i].Receive((char*)temp,MsgSize,0);
// In username ra
temp[MsgSize] ='\0';
int score=3;
int ques;
sockClients[i].Receive((char*)&ques,sizeof(int),0);
ifstream CH;
CH.open("cauhoi.txt",ios::in);
ifstream DA;
DA.open("dapan.txt",ios::in);
for(int j=0;j<ques;j++)
{
char* CH_SV=new char;
CH>>CH_SV;
int Size = strlen(CH_SV);
sockClients[i].Send(&Size,sizeof(int),0);
sockClients[i].Send(CH_SV,Size,0);
char* DA_SV=new char;
DA>>DA_SV;
char *dapan;
sockClients[i].Receive((char*)&Size,sizeof(int),0);
dapan = new char[Size +1];
sockClients[i].Receive((char*)dapan,Size,0);
dapan[Size] ='\0';
cout<<"\nDap an la: "<<dapan<<endl;
if(Size<5)
goto Exit;
else if(strcmp(dapan,DA_SV)==0)
score+=2;
else score--;
}
sockClients[i].Close();
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
HMODULE hModule = ::GetModuleHandle(NULL);
if (hModule != NULL)
{
// initialize MFC and print and error on failure
if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
_tprintf(_T("Fatal Error: MFC initialization failed\n"));
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
CSocket server;
AfxSocketInit(NULL);
server.Create(3456);
server.Listen();
int nclient;
cout<<"Nhap so luong client: ";
cin>>nclient;
CSocket * sockClients = new CSocket[nclient];
for (int i = 0; i <nclient; i++)
{
server.Accept(sockClients[i]);
printf("\nClient: %d/%d",i+1,nclient);
sockClients[i].Send((char*)&i,sizeof(int),0);
abc(sockClients,i);
}
server.Close();
}
}
else
{
// TODO: change error code to suit your needs
_tprintf(_T("Fatal Error: GetModuleHandle failed\n"));
nRetCode = 1;
}
return nRetCode;
}
不幸的是,有這麼多的錯誤與此代碼,我真的無法解釋怎麼您'd將線程結合到混合中。我看到內存泄漏,緩衝區溢出,可遠程利用的安全漏洞,我不明白在當前狀態下代碼如何工作。你真的有興趣把這一切都清理乾淨嗎? –
謝謝你,我會做清理,順便說一句,你知道如何把cleint放在線程中嗎? – user3500533
「請幫助我」這不是問題。堆棧溢出不是「聊天」或「論壇」 - 我們不會「引導」或「導師」你。它是關於編程語言和代碼片斷的簡明問題和簡明回答的數據庫。請記住你的未來職位。 –