Klient tcp problem z wysłaniem komunikatu.

0

Witam. Mam mały problem z poprawnym wysłaniem komunikatu tcp w Javie.

Posiadam napisany serwer (w c#) do którego może podłączyć się wiele klientów. Autoryzacja odbywa się poprzez wysłanie komunikatu "NazwaKlientapusty:".

Posiadam również klienta napisanego w c#, który poprawnie komunikuje się z serwerem oraz bezbłędnie jest przez niego autoryzowany.

klient = new TcpClient(serwerIP, port_serwera); NetworkStream ns = klient.GetStream(); pisanie = new BinaryWriter(ns); pisanie.Write(TwojeIP + ":HI:" + "pusty:"); ```

Takim kodem wysyłam dane do serwera aby dokonać autoryzacji w c#. W przypadku Javy próbuje to zrobić następująco :

System.out.println("Łączenie");
		  Socket clientSocket = new Socket("192.168.0.102", 8081);
		  System.out.println("Połączono");
		  
		 String wiadomosc = "192.168.0.102:HI:";
		  
		 PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
		 
		  BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
		 
		  System.out.println("Wyslano " + wiadomosc );
		  out.print(wiadomosc);
		  out.close();
		  clientSocket.close();

W wyniku tego na ekranie w javie dostaję :

Łączenie
Połączono
Wyslano Ja

Jednak w serwerze występuje w tym momencie wyjątek "Nie można odczytać danych spoza stumienia"

obiektTCP.setTcpClient();
                NetworkStream ns = obiektTCP.getStream();
                BinaryReader czytanie = new BinaryReader(ns);
                string dane = czytanie.ReadString(); // w tej linijce!!!

Dodam że klient c# nie powoduje takiego wyjątku (coś musi być nie tak z wysyłaniem w javie)
0

zamykasz socket, a serwer próbuje odczytać dane. Musisz obsłużyć ten wyjątek, oraz najlepiej przed rozłączeniem wysłać jakiś komunikat, że chcesz się rozłączyć. Wtedy serwer usunie sobie tego klienta nim on się rozłączy.

0

Mam obsłużone wszystkie wyjątki.. Wygląda mi to jednak na coś takiego, że a javy klient się łączy i od razu rozłącza. poza tym gdy klient się rozłącza (tak jest w c#) wysyłany jest komunikat "NazwaKlienta:BYE" to informuje serwer o tym iż nastąpi rozłaczenie. Tu jednak nawet 1 komunikatu nie można wysłać...

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