Prosty serwer i klient nie działa. Prośba o sprawdzenie

0

Próbuję napisać prosty program sieciowy.
Nie ma żadnych błędów, tylko że klient odbiera "null" a powinno być "Witaj kliencie".
Dlaczego? Proszę o pomoc :)

Oto kod:

Serwer:

import java.io.*;
import java.net.*;

public class Serwer {

	public static void main(String[] args) {
		ServerSocket gniazdo = null;
		try {
			gniazdo = new ServerSocket(8866);
		} catch (IOException e) {System.out.println("Nie można utworzyć gniazda serwera");}
		
		Socket połączenie = null;
		try {
			połączenie = gniazdo.accept();
		} catch (IOException e) {System.out.println("Nie można nawiązać połączenia z klientem");}
		
		OutputStream wy = null;
		try {
			wy = połączenie.getOutputStream();
		} catch (IOException e1) {System.out.println("Nie można pobrać strumienia wejściowego");}
		
		PrintWriter zapis = null;
		if (wy != null) zapis = new PrintWriter(wy);
		
		try {
			if (zapis != null) zapis.print("Witaj kliencie!");
		}catch (Exception e) {System.out.println("Nie można do strumienia wyjściowego zapisać danych.");}
		
		try {
			połączenie.close();
		} catch (IOException e) {System.out.println("Nie można zamknąć połączenia");}
	}

}

Klient:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class Klient {
	static Socket gniazdo = null;
	
	public static void main(String[] args) {
		
		try {
			gniazdo = new Socket("localhost", 8866);
		} catch (IOException e) {System.out.println("Nie można utworzyć gniazda klienta");}
		
		InputStream we = null;
		
		try {
			we = gniazdo.getInputStream();
		} catch (IOException e) {System.out.println("Nie można pobrać strumienia wejściowego");}
		
		BufferedReader odczyt = null;
		
		if (we != null) {
		odczyt = new BufferedReader(new InputStreamReader(we));
		}
		
		
			try {
				if(odczyt != null) {
					String tekst = odczyt.readLine();
					System.out.println("Serwer: " + tekst);
				}
			} catch (IOException e) {System.out.println("Nie można odczytać danych z serwera");}
			
			try {
				odczyt.close();
				we.close();
			}catch (IOException e) {System.out.println("Nie można zamknąć strumieni wejściowych");}
			
			try {
				gniazdo.close();
			} catch (IOException e) {System.out.println("Nie można zamknąć gniazda sieciowego klienta");}
		
	}

}
0

Może spróbuj to opakować w klasę bufforedStream a potem w inne strumienie?

0

zamknij PrintWriter w serwerze(tam gdzie zamykasz gniazdo)

zapis.close();
0
garai napisał(a):

zamknij PrintWriter w serwerze(tam gdzie zamykasz gniazdo)

zapis.close();

Zrobiłem tak ale nie ma efektów.
Zastanawia mnie co innego mianowicie skoro odczyt jest równy null to w jaki sposób przechodzi przez warunek:

if(odczyt != null) {
                    String tekst = odczyt.readLine();
                    System.out.println("Serwer: " + tekst);
                }

W konsoli wyświetla się dokładnie to: Serwer: null
Ale skoro odczyt równa się null to nic nie powinno się wyświetlić.
Jak to możliwe?

1
try {
            zapis.close();
            połączenie.close();
        } catch (IOException e) {System.out.println("Nie można zamknąć połączenia");}

Taki zapis na serwerze i u mnie działa :)

"Serwer: null" oznacza, że zmienna tekst jest nullem a nie odczyt.

0

Dzięki, teraz działa :)
Problemem było to że najpierw zamykałem połączenie, a dopiero potem PrintWriter
Dzięki :D

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