TcpListener i brak możliwości nasłuchu na dwóch gniazdach o tym samym porcie, IP i protokole

0

Witam. Mam problem (wiem, strasznie dżo mam tych problemów, ale nigdy nie pracowałem "na całego z TCP i UDP :)) z klasą TcpListener :/. Otóż robię sobie grę (niektórzy już chyba czytali moje wcześniejsze posty :)) i dla obsługi każdego gracza tworzony jest nowy wątek. Rzecz w tym, że gdy otwieram nasłuch (klasa TcpListener) jest dobrze, natomiast gdy jest otwierany drugi nasłuch na tym samym porcie wywala mi wyjątek SocketException (Tylko jedno użycie każdego adresu gniazda (protokół/adres sieciowy/port) jest normalnie dozwolone). Mam przypuszczenia co do wywalania tego wyjątku, że ta klasa nasłuchuje "ogólnie" więc dlatego wyskakuje wyjątek. Ale skoro tak, to jak "wyłonić" adres IP komputera od którego otrzymaliśmy dane (chodzi mi tu o login i hasło)? To cały kod odbierania danych:

            TcpListener tcpListener = new TcpListener(4321);
            tcpListener.Start();
            while (true)
            {
                Socket handlerSocket = tcpListener.AcceptSocket();
                if (handlerSocket.Connected)
                {
                   ** IPAddress tester =    IPAddress.Parse(((IPEndPoint)tcpListener.LocalEndpoint).Address.ToString());**
                    ThreadStart pts = delegate { testr(tester); };
                    users[i] = new Thread(pts);
                    users[i].Start();
                    i++;
                }
            }

Jak widać znalazłem kod do "wyłaniania" IP, ale niestety oczywiście musiał wyskoczyć jakiś błąd. Uzyskuję w ten sposób nie wiem co, bo nie IP komputera, z którym się łączę, a "0.0.0.0". Bardzo prosiłbym o poprawny kod/komendę/metodę, dzieki której/któremu uzyskam adres IP klienta ;).

P.S.: Czy zamiast klasy Socket użyć NetworkStream?

0

Nie możesz otwierać drugiego nasłuchu na tym samym porcie (mówi o tym wyraźnie treść wyjątku który dostajesz). Wystarczy Ci jeden nasłuch, a za każdym razem kiedy połączy się klient, wrzucaj odpowiadający mu socket do jakiegoś kontenera (listy\słownika) i nasłuchuj kolejnych połączeń.
Co do drugiego pytania: Socket i NetworkStream są ze sobą powiązane. NetworkStream używasz do komunikacji z Twoim klientem, poprzez właśnie ów Socket.

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