Moment połączenia klienta z serwerem

0

Witam

Mam pytanko. W którym momencie serwer "wie" ze jakoś klient podłącza się do niego, czy po wysłaniu pierwszych danych czy wcześniej? Chodzi o to że piszę aplikację klient- serwer za pomocą socketów i nie wiem w którym momencie utworzyć nowy wątek obsługujący nowego klienta.

pozdrawiam

0

Serwer czeka na polaczenie (znaczy wisi zwykle w tym momencie) i zwykle 'wywolanie czekania' konczy sie w momencie polaczenia. Czyli w pseudokodzie zwykle wyglada to tak:

dopoki serwer_dziala
{
  czekaj_na_polaczenie();
  stworz_nowy_watek(); //skoro tutaj jest to znaczy, ze sie doczekal.
}
0

Zrobiłem coś takiego:

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 8000);
            Socket newsock = new Socket(AddressFamily.InterNetwork,
                               SocketType.Stream, ProtocolType.Tcp);
            newsock.Bind(localEndPoint);
            newsock.Listen(10);

            while (true)
            {
                client = newsock.Accept();
                if (client.Connected == true)
                {
                    Thread wątek = new Thread(new ThreadStart(obsługa_klienta));
                    wątek.Start();
                }
            }
public void obsługa_klienta()
        {
            NetworkStream strumień = new NetworkStream(client);
            StreamReader czytanie = new StreamReader(strumień);
            StreamWriter pisanie = new StreamWriter(strumień);
            while (true)
            {
                string napis = czytanie.Read().ToString();
                MessageBox.Show(napis);

            }
        }

i niestety po wysłaniu od klienta jakiegoś komunikatu serwer nic ni odbiera. w czym może tkwić błąd??

z góry dzięki za pomoc

0

A co na to debugger? Ktora linijka wydaje sie byc problemem?

0

Program po natrafieniu na tą linię kodu:

string napis = czytanie.Read().ToString();

oczekuje na odbiór danych a jak wysyłam coś z klienta to nic się nie dzieje

0

Jak wysylasz?

0

Połączenie:

IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 10000);
            server = new Socket(AddressFamily.InterNetwork,
                              SocketType.Stream, ProtocolType.Tcp);
            server.Connect(ipep);
            strumień = new NetworkStream(server);
            czytanie = new StreamReader(strumień);
            pisanie = new StreamWriter(strumień);

I wysyłanie:

pisanie.Write("hej");

0

No to przeciez na inny port wysylasz ;) Otwierasz do sluchania 8000, wysylasz 10000. To MA znaczenie. Sprawdzic mozesz rowniez komenda 'telnet', bez pisania drugiej strony.

0

Port to później zmieniłem po obu stronach mam ten sam więc to nie jest tego wina. A tym telnetem to jak sprawdzić bo nigdy tego nie robiłem.

0

Wchodzisz w linie polecen:

telnet localhost port

//edit
Twoj kod serwera dziala, dane z telneta sa odbierane.

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