Wysyłanie komunikatow przez serwer

0

Witam . Pisze pewną aplikacje sieciową opartą na wysylaniu plików , działa ona ok ale chcialem sobie napisac funkcje do wysylania i odbierania komunikatow tak zeby byl porzadek bo przy wysylaniu pliku takze wysylal komunikatu np do serwera jak duzy jest plik i jaka jest nazwa pliku . Wydawalo mi sie to proste skopiowac kod ktory sluzy do wysylania w funkcje i juz , niestety ciagle mam problem.

	public static void wyslij_komunikat(DataOutputStream komunikat_do_serw,Socket s,String tresc) throws IOException{
//	{		
	komunikat_do_serw =
	new DataOutputStream(s.getOutputStream());			 
	komunikat_do_serw.writeBytes(tresc + '\n'); 
	}

I SERWER

public static void obierz_komunikat(BufferedReader br,Socket s) throws IOException{
//		 br = new BufferedReader(new InputStreamReader(
//				s.getInputStream()));///BUFOR
//		String komunikat = br.readLine();
	
			 br =	 new BufferedReader(new
				 InputStreamReader(s.getInputStream())); 
			 String komunikat = br.readLine(); 
		System.out.println(komunikat);
		}

BŁĄD mam taki
Exception in thread "main" java.net.SocketException:Socket is closed at java.net.Socket.getOutputStream<Unknown Source> at Klient.wyslij_komunikatKlient.java:30

Wczesniej uzywalem Printstream ale tez był bład oczywiscie sockety zamykam na samym koncu a bład w linijce

new DataOutputStream(s.getOutputStream());		

Nie wiem o co w tym chodzi.

0

Nie połączyłeś się z serverem, prawdopodobnie. Kilka sekund w google, poszukaj, dużo szybciej znajdziesz informacje w google i nie zawracasz w głowie forumowiczom.

0

Serwer ma petle while(true) w niej jest akceptacja polaczenia po polaczeniu przeslalem plik , wyswietla ala ma kota i wyrzuca bląd przy wyslaniu komunikatu

while(true)
{
//wysylanie pliku
//Jakis System.out.println("ala ma kota");
//wysylanie komunikatu
}
//zamkniecie socketa

Po stronie kl i po stronie serwera zmienna Socket s , jest prawidlowa zawiera ip i port

0

KL

public class Klient {
	public static void wyslij_komunikat(DataOutputStream komunikat_do_serw,Socket s,String tresc) throws IOException{
//	{		
	komunikat_do_serw =
	new DataOutputStream(s.getOutputStream());			 
	komunikat_do_serw.writeBytes(tresc + '\n'); 
	}

	
	
///////////////////////////////
	
/////////////////MAIN//////////////////////////////////
	public static void main(String[] args) throws IOException {

		System.out.println("Your Host addr: "+ InetAddress.getLocalHost().getHostAddress());
		String nazwaSerwera = (InetAddress.getLocalHost().getHostAddress());// adres
																			// sieci
																			// lokalnej
		int portSerwera = 63624;
		InetAddress adresSerwera = InetAddress.getByName(nazwaSerwera);
		Socket s = new Socket(adresSerwera, portSerwera);
		System.out.println("Hej tu Klient");

		
		String aa="hello";
		DataOutputStream komunikat_do_serw=null;
		System.out.println(s);
		wyslij_komunikat(komunikat_do_serw, s, aa);
		//ZAMYKAM GNIAZDO
		System.out.println("Tyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy");		
		Kl_metody.zamknij_gniazdo(s);
	}


SERW

public class Serwer {


//////////////////////////MAIN//////////////////////////////	
	public static void main(String[] args) throws IOException {
		try{
		//POLACZENIE
		int portSerwera = 63624;
		ServerSocket ss = null;
		InetAddress adress = InetAddress.getByName(InetAddress.getLocalHost().getHostAddress());
		ss = new ServerSocket(portSerwera, 100, adress);
		System.out.println("Server waiting .....");
		

		// akceptacja polaczen
		while (true) {
			Socket s = ss.accept(); // blokujaca
			System.out.println("Połaczenie z serwerem nawiazane");
 System.out.println(s);
			 Serwer_metody.obierz_komunikat(br, s);//odbieramy wiadmosc
			Serwer_metody.Zamknij_Serwer(ss,s);
			System.out.println("Zamknieto serwer");
}
		}catch (IOException exc) {
			 System.out.println(exc.getMessage());
			 System.exit(1);
			
			 }
		
		
		}
}
		

0

Upewnij się że na pewno się połączyłeś. Jak wrócę do domu to sprawdzę kod u siebie i odpowiem.

0

To co napisalem to dziala , to jest odchudzona wersja przed funkcją wyslij_komunikat sa inne funkcje gdzie przesylam pliki na koncu zamykam bufory i strumienie czy przez to potem nie moge wyslac komunikatu ? Przeciez Tworze strumien na nowo wiec nie powinno byc problemu , jesli nie zamkne tego wszystkiego to klient nie wysyla a serwer nie odbiera wszystko stoi w miejscu po wyslaniu pliku i junkcja wyslij_komunikat nigdy sie nie odpala , oczywiscie sockety zamykam na sam koniec po wszystkim , jakie moga być powody zesrwania połaczenia?

0

No to wklej cały kod.

Tak wgl to czemu deklarujesz obiekt DataOutputStream poza funkcją, przekazujesz ten obiekt do funkcji, tam go tworzysz,korzystasz? o.O

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