Ĺadny brzuch
Cześć
Z tego co czytałem taki wątek nie narusza regulaminu.
Otóż piszę program - serwer. Oczekuje on na połączenie klienta potem sam łączy się z innym serwerem. Tworzy 2 wątki nazwijmy je A i B:
// sock to połączenie z "innym serwerem" // srvsock to połączeni z "klientem" void toweb_recv(void *) // A { int juz, BytesRecv = 0; char bfr[2048]; while(BytesRecv != -1){ BytesRecv = recv(sock, bfr, sizeof(bfr), 0); juz=0; for(int i =0; i<BytesRecv; i++) jacliodb.push_back(bfr[i]); while(juz<BytesRecv) juz += send(srvsock, (char*)&bfr+juz, BytesRecv-juz, 0); } } void toloc_recv(void *) // B { int juz,BytesRecv = 0; char bfr[2048]; while(BytesRecv != -1){ BytesRecv = recv(srvsock, bfr, sizeof(bfr), 0); juz=0; for(int i =0; i<BytesRecv; i++) jasrvodb.push_back(bfr[i]); while(juz<BytesRecv) juz += /*hook_*/send(sock, (char*)&bfr+juz, BytesRecv-juz, 0); } }
zmienne sock i srv sock są zmiennymi globalnymi.
Mój serwerek działa narazie tylko dla jednego klienta. Jak widzicie do przetwarzania wymienianych danych użyłem 2 wektorów(buforów) jasrvodb i jacliodb dzięki temu jak mi się wydaje prędkość przetwarzania danych przez serwer nie ma wpływu na prędkość komunikacji.
Taki serwerek w którym po połączeniu klienta nie jest nawet tworzony wątek wystarczał mi do tej pory :] jednak chciałbym teraz dodać możliwość podłączenia kilku klientów i tu zaczyna się problem - zmienne globalne. Drugi problem Serwer po połączeniu kolejnego klienta musiałby stworzyć wątek C a ten z kolei wątki A i B. Nie wiem czy to jest możliwe i czy jest to praktyczne.
Moja intuicja podpowiada mi obiekty ale nie mam z nimi doświadczenia i nie wiem zabardzo jak miałyby wyglądać odpowiednie klasy. Z góry dziękuję za wszelkie podpowiedzi i porady.
Pozdro 4 All
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Z tego co czytałem taki wątek nie narusza regulaminu.
Otóż piszę program - serwer. Oczekuje on na połączenie klienta potem sam łączy się z innym serwerem. Tworzy 2 wątki nazwijmy je A i B:
// sock to połączenie z "innym serwerem" // srvsock to połączeni z "klientem" void toweb_recv(void *) // A { int juz, BytesRecv = 0; char bfr[2048]; while(BytesRecv != -1){ BytesRecv = recv(sock, bfr, sizeof(bfr), 0); juz=0; for(int i =0; i<BytesRecv; i++) jacliodb.push_back(bfr[i]); while(juz<BytesRecv) juz += send(srvsock, (char*)&bfr+juz, BytesRecv-juz, 0); } } void toloc_recv(void *) // B { int juz,BytesRecv = 0; char bfr[2048]; while(BytesRecv != -1){ BytesRecv = recv(srvsock, bfr, sizeof(bfr), 0); juz=0; for(int i =0; i<BytesRecv; i++) jasrvodb.push_back(bfr[i]); while(juz<BytesRecv) juz += /*hook_*/send(sock, (char*)&bfr+juz, BytesRecv-juz, 0); } }
zmienne sock i srv sock są zmiennymi globalnymi.
Mój serwerek działa narazie tylko dla jednego klienta. Jak widzicie do przetwarzania wymienianych danych użyłem 2 wektorów(buforów) jasrvodb i jacliodb dzięki temu jak mi się wydaje prędkość przetwarzania danych przez serwer nie ma wpływu na prędkość komunikacji.
Taki serwerek w którym po połączeniu klienta nie jest nawet tworzony wątek wystarczał mi do tej pory :] jednak chciałbym teraz dodać możliwość podłączenia kilku klientów i tu zaczyna się problem - zmienne globalne. Drugi problem Serwer po połączeniu kolejnego klienta musiałby stworzyć wątek C a ten z kolei wątki A i B. Nie wiem czy to jest możliwe i czy jest to praktyczne.
Moja intuicja podpowiada mi obiekty ale nie mam z nimi doświadczenia i nie wiem zabardzo jak miałyby wyglądać odpowiednie klasy. Z góry dziękuję za wszelkie podpowiedzi i porady.
Pozdro 4 All