Prosta aplikacja server-client

0

Mam z tutoriala takie dwie klasy:
Serwer:

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

public class Server {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try{
			ServerSocket myServerSocket = new ServerSocket(999); //stworzenie gniazda servwera i przypisanie mu portu (tu 9999)
		
			// Oczekiwanie na połączenie od hosta
			System.out.println("Serwer: Start na hoście-"
			+InetAddress.getLocalHost().getCanonicalHostName()
			+" port: "+myServerSocket.getLocalPort());
			Socket skt = myServerSocket.accept();
			
			//Opcje odczytu i zapisu z i do strumienia
			BufferedReader Input = new BufferedReader(new InputStreamReader(skt.getInputStream())); //odczyt
			PrintStream Output = new PrintStream(skt.getOutputStream());							//zapis
		
			//Próba odczytania wejścia ze strumienia
			String buf = Input.readLine();
			
			//Sprawdzenie, czy serwer odebrał wiadomość i próba odpisania hostowi
			if (buf !=null){
				System.out.println("Serwer, odczyt: [ "+buf+" ]");
				Output.print("Serwer: No siemka!"); //Odpowiedź dla hosta w przypadku odebrania wiadomości	
			}
			// Zamknięcie połączenia ze strony serwera
			skt.close();
			System.out.println("Serwer - Odłączony");
			
		}
		catch (IOException ex){
			ex.printStackTrace();
			System.out.println("Uuuups, coś się skopało. nie podziałam!");
		}
	}

}

i Klient:

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

public class Klient {

	public void main(String[] args){
		
		//Tworzenie gniazda, i sprawdzenie czy host/pory serwera nasłuchuje
		String host;
		int port;
		
		if(args.length==0){
			host= "localhost";
			port = 999;
		}
		else{
			host = args[0];
			String portStr = args[1];
			try {
				port=Integer.parseInt(portStr);
			}
			catch(NumberFormatException nfe){
				System.out.println("Uuups, zły numer portu. Przełączam na domyslny port: 9999");
				port = 999;
			}
		}
	try{
		//Próba połączenia z serwerem
		System.out.println("Klient: Próba podłączenia do serwera jako host-"+host+" port: "+port+'.');
		Socket skt = new Socket(host,port);
		
		//Opcje odczytu i zapisu z i do strumienia
		BufferedReader Input = new BufferedReader(new InputStreamReader(skt.getInputStream())); //odczyt
		PrintStream Output = new PrintStream(skt.getOutputStream());
		
		//Przesłanie sprawdzającej wiadomości na serwer:
		Output.println("Klient: Siema Heniu!");
		
		//Sprawdzenie, czy serwer odpowiedział.
		String buf=Input.readLine();
		if(buf !=null){
			System.out.println("Klient: Odpowiedź serwera [ "+buf+" ]");
		}
		else
			System.out.println("Klient: Brak odpowiedzi z serwera.");
		
		// Zamknięcie połączenia ze strony klienta
		skt.close();
		System.out.println("Klient - Odłączony");
		
	}
	catch (IOException ex){
		ex.printStackTrace();
		System.out.println("Uuuups, coś się skopało. nie podziałam!");
	}
	}
}

Odpalam serwer i działa. Odpalam klienta... i

java.net.BindException: Address already in use: JVM_Bind
	at java.net.DualStackPlainSocketImpl.bind0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
	at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
	at java.net.PlainSocketImpl.bind(Unknown Source)
	at java.net.ServerSocket.bind(Unknown Source)
	at java.net.ServerSocket.<init>(Unknown Source)
	at java.net.ServerSocket.<init>(Unknown Source)
	at Server.main(Server.java:9)
Uuuups, coś się skopało. nie podziałam!

Gościu z tutoriala też ma eclipsa i wszystko mu hula (jedyna różnica, że on ma apple'a). Nie ogarniam dlaczego mnie nie.

0

Uruchom menadżera zadań i zakończ proces javac. Masz już zajęty port 9999 przez serwer który uruchomiłeś wcześniej i dlatego nie może utworzyć nowego.

0
santis69 napisał(a)

Uruchom menadżera zadań i zakończ proces javac. Masz już zajęty port 9999 przez serwer który uruchomiłeś wcześniej i dlatego nie może utworzyć nowego.

Ale jak zamknę proces, to klient się z serwerem nie połączy, bo zakończy się praca serwera. Zamknąłem wszystkie procesy javaw (poza tym, obsługiwanym przez eclipsa) uruchomiłem serwer i klienta i dalej błąd.

0

to spróbuj zmienić nr portu na serwerze na jakiś inny, tylko pamiętaj żeby w kliencie był taki sam port jak na serwerze. Może i być tak że zapora blokuje, jak nie pomoże to tam zaglądnij

0

NOŻ KA JEGO J**GO MAĆ!!!! Jak pisałem public void main(String[] args){} to zapomniałem static ... Ogarniacie? A już chciałem monitor za okno ...

0

Głupoty opowiadasz, taka klasa Klient jak zamieściłeś w pierwszy poście wyświetli, po uruchomieniu, zupełnie inny komunikat błędu.

0

Najpierw trzeba uruchomić serwer, a póżniej klienta

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