Здраствуйте. Делаю серверную часть на TCP. Хочу чтобы кждий клиент прослушивался в отдельном потоке и принятую инфу от него выкидало на экран. Но что он не корректно работает  Вот моё творение: | Код | DWORD WINAPI ClientThreadRecive(LPVOID lpParam); //Прототип int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsa; // Info about winsock2 int error; DWORD dwThreadId; HANDLE hThread; WSAStartup(MAKEWORD(1,0), &wsa); // Loading library winsock2 SOCKET mySocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); // Создание сокета accept SOCKET connectedSocket; // Создание сокета для приёма
sockaddr_in AdressInfo; AdressInfo.sin_family = AF_INET; // Internet technology (TCP,UDP etc) AdressInfo.sin_port = htons(4888); AdressInfo.sin_addr.s_addr=inet_addr("127.0.0.1");
cout<<"\t\tThis is a server part. Using TCP technology.\n\n";
error = bind(mySocket, (SOCKADDR*)&AdressInfo, sizeof(AdressInfo)); //Связывание даных с сокетом switch(error) { case 0: cout<<"Bind . . . OK\n"; break; default: cout<<"Bind . . . ERROR\n"; break; }; error = listen(mySocket, 3); // Прослушка switch(error) { case 0: cout<<"Listen process . . . OK\n"; break; case WSAEINVAL: cout<<"Listen process . . . ERROR(function bind was not called)\n"; break; case WSANOTINITIALISED: cout<<"Listen process . . . ERROR(do not load library \"winsock\")\n"; break; case WSAEISCONN: cout<<"Listen process . . . ERROR(socet is allready connected)\n"; break; default: cout<<"Listen process . . . ERROR(unknown)\n"; break; };
int AdressInfoSize = sizeof(AdressInfo); while (1) { connectedSocket = accept(mySocket, (struct sockaddr *)&AdressInfo,&AdressInfoSize);
hThread = CreateThread(NULL, 0, ClientThreadRecive, (LPVOID)connectedSocket, 0, &dwThreadId); CloseHandle(hThread); cout<<"\t"<<inet_ntoa(AdressInfo.sin_addr); } } DWORD WINAPI ClientThreadRecive(LPVOID lpParam) { DWORD result = 0; SOCKET RecvSock=(SOCKET)lpParam; char RecvPackage[1024]; char msg[1000]; char RecvDate[10]; char RecvTime[5]; char RecvComputerName[15]; int ret; while(1) { ret = recv(RecvSock, RecvPackage, sizeof(RecvPackage), 0); cout<<RecvPackage; } return result; }
|
Проблема в том, что когда хотя бы один клиент выходит из сети то на экраны появляются разные символы Помогите пожалуйста  Буду очень благодарен. Это сообщение отредактировал(а) Sergio - 28.1.2007, 21:13
|