Okej, mam tylko taki jeden mały problem, mam tkai kod:
while(true)
{
Klient temp;
SOCKET client = accept(sock,(struct sockaddr *)&ich,&sin_size);
if (client!= INVALID_SOCKET)
{
int ID = wszyscy.size(); //wszyscy to wektor struktur Klient; ID na początku 0 potem 1, 2, 3, 4 itd
memset(&temp,0,sizeof(Klient)); //zeruje strukture
temp.Gniazdo = client; //wypełniam
temp.Identyfikator = ID;
temp.Nick = "";
temp.Watek = NULL;
wszyscy.push_back(temp);//Dodaje
std::cout << ID << std::endl; //dla testu wypisuje ID przydzielone
std::cout << inet_ntoa(ich.sin_addr) << std::endl;//IP
wszyscy[ID].Watek = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Watek,&wszyscy[ID], 0 ,NULL);//Tworzę wątek
if (wszyscy[ID].Watek == NULL) std::cout << "Blad z watkiem!" << std::endl;
}
}
Wątek:
DWORD Watek(LPVOID Dane)
{
const char* tekst_serwera = "Halo, tu server :D\n\0";
Klient *temp = (Klient*) Dane;
send(temp->Gniazdo,tekst_serwera,strlen(tekst_serwera),0);
std::cout << "Podlaczyl sie klient o ID: " << temp->Identyfikator << std::endl;
char bufor[500];
while(true)
{
```c
memset(bufor,0,500);
recv(temp->Gniazdo,bufor,500,0);
std::cout << bufor;
}
}
Problem jest taki, że gdy uruchomię np 2 klienty to server wysyła normalnie do nich wiadomość tekst_servera no i gdy napiszę coś w kliencie który uruchomiłem jako drugi i potem wrócę do 1 klienta to prawdopodobnie coś z wątkami się psuje bo serwer skacze z użyciem CPU do 80% (podobną sytuację miałem gdy robiłem ten sam czat ale na tablicy klientów o rozmiarze 20 i któryś z klientów się rozłączył i nie miałem kodu odpowiadającego za obsłużenie zamkniętego wątku, ale przecież teraz nic nie zamykam a tak się dzieje) i nie wyświetla bufora dla 1 klienta zaś dla 2 działa dobrze tylko że strasznie powoli. Lecz jak po uruchamiam więcej klientów to one dobrze wysyłają i serwer dobrze odbiera dane ale wciąż strasznie muli.