Winsock - tego jeszcze nie było

Odpowiedz Nowy wątek
2006-11-21 10:43
0

Witam.
Mam parę rzeczy do wyjaśnienia wiec jesli to nie powędruje do kosza to jak kto coś wie to napisze. Wszystko się tyczy WINSOCK więc jesli ktoś ma zamiar pisać o indy to dziękuje ale nie trzeba.
A więc: Czy jeśli używam wątków to się nie używa funkcji select ( no bo i chyba po co ale nie wiem dokładnie)?
Dalej jak tworzymy serwerek to użuwamy bind, listen accept no ale jęśli chcemy żeby pracował na dwóch portach (jednoczesnie) to klient ma się tak jak gdyby podwójnie łączyć i czy muszę w serwerku podwujnie strukturę (AF_INET, sin, addr itp) wypełniać czy to tylko jeden port jakoś dodać. No i pozatym czy ma ktoś jakiś programik z dwoma portami bo niewiem czy ja to dobrze robię ale jak utworzyłam strukturkę dla jednego portu ( w aplikacji klienta i aplikacji serwera) to potraktowałam ją COPY PASTE i zmieniłam co niektóre zmienne - działąć to działa ( no ale dwa razy bind, 2x accept, 2xconnect - dziwne). No ale w tym przypadku jak się klient łączy to najpierw się łączy na jeden port a puzniej musi się na drugi połączyć - czyli mamy tu tak jak gdyby podwójnego klienta i podwójny serwer. Wiem że to wszystko dziwne ale wszystkie info jakie udało mi się znaleźć to tyczyły się aplikacji działąjących na jednym porcie.
Za wszelkie uwagi, pomoce fenks.

Pozostało 580 znaków

2006-11-21 18:50
__Flak
0
agnieszka napisał(a)

Witam.
A więc: Czy jeśli używam wątków to się nie używa funkcji select ( no bo i chyba po co ale nie wiem dokładnie)?

---- można, ale nie ma po co.choć z drugiej strony czekanie na dane na socketach w trybie blocking w konfiguracji 1 wątek jeden recv wydaje się marnotrawieniem zasobów przy np. 100 jednoczesnych połączeniach.

agnieszka napisał(a)

Dalej jak tworzymy serwerek to użuwamy bind, listen accept no ale jęśli chcemy żeby pracował na dwóch portach (jednoczesnie) to klient ma się tak jak gdyby podwójnie łączyć i czy muszę w serwerku podwujnie strukturę (AF_INET, sin, addr itp) wypełniać czy to tylko jeden port jakoś dodać.

do kazdego nasłuchiwanego portu musisz zbindowac jeden socket. Tak więc po stronie serwera do połączenia na np. dwóch portach musisz zbindować dwa sockety.

agnieszka napisał(a)

No i pozatym czy ma ktoś jakiś programik z dwoma portami bo niewiem czy ja to dobrze robię ale jak utworzyłam strukturkę dla jednego portu ( w aplikacji klienta i aplikacji serwera) to potraktowałam ją COPY PASTE i zmieniłam co niektóre zmienne - działąć to działa ( no ale dwa razy bind, 2x accept, 2xconnect - dziwne). No ale w tym przypadku jak się klient łączy to najpierw się łączy na jeden port a puzniej musi się na drugi połączyć - czyli mamy tu tak jak gdyby podwójnego klienta i podwójny serwer.

dlaczego dziwne ? nie chcę Ci pisac rzeczy, które możesz uznawać oczywiste, ale ta "niedogodnosć" o której piszesz (ustawianie wszystkiego x2) ma miejsce tylko w przypadku samego procesu nawiązywania połączenia- dalej nie ma już takiego problemu - odbieranie danych można przerzucić już na parę select/recv. A poza tym, całą komunikację z serwera z większą liczbą klientów można zrobić na jednym porcie.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0