Wypisywanie Server-klient.

0

Czesc stworzyłem aplikacje Servera, z ktora lacze sie za pomoca telnetu, jednak nie działa mi w niej komenda "Wypisz()". Gdzie lezy blad ??

 
public class SerwerD{
	public static void main(String[] args) throws Exception{
		int i=0;
		ServerSocket s = new ServerSocket(8189);
		while(true){
			Socket incoming = s.accept();
			Runnable r = new ThreadServer(incoming);
			Thread t= new Thread(r);
			t.start();
			
		}

	}
}
class ThreadServer implements Runnable{
	public Socket incoming;


	public ThreadServer(Socket i) throws Exception, NullPointerException{
		incoming =i;
	}
	public void run() {
		try{
				InputStream inStream = incoming.getInputStream();
				OutputStream outStream = incoming.getOutputStream();
				
				
				Scanner in = new Scanner(inStream);
				PrintWriter out = new PrintWriter(outStream, true);
				out.println("DAJESZ");
				
				Wypisz();
				
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
//					incoming.close();
			}	
	}	
	public void Wypisz(){
		out.println("ddd");
	}
	public PrintWriter out;
}

0

działa jak napisałem, ale nie wiem dlaczego wczesniej nie dzialalo

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


public class SerwerD{
	public static void main(String[] args) throws Exception{
		int i=0;
		ServerSocket s = new ServerSocket(8189);
		while(true){
			Socket incoming = s.accept();
			Runnable r = new ThreadServer(incoming);
			Thread t= new Thread(r);
			t.start();
		}

	}
}
class ThreadServer implements Runnable{
	public Socket incoming;


	public ThreadServer(Socket i) throws Exception, NullPointerException{
		incoming =i;
	}
	public void run() {
		try{
			InputStream inStream = incoming.getInputStream();
			OutputStream outStream = incoming.getOutputStream();
			
			
			
			Scanner in = new Scanner(inStream);
			PrintWriter out = new PrintWriter(outStream, true);
			out.println("DAJESZ");
			Wypisz(out);
			out.println("DDD");

		
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
//			incoming.close();
		}	
	}	
	public void Wypisz(PrintWriter out2){
		out2.println("ddd");
	}
	public static PrintWriter out;
}

0

Pierwszy kod nie działa, bo próbujesz pisać do obiektu, który jest równy null.

class ThreadServer implements Runnable{
        public Socket incoming;
 
 
        public ThreadServer(Socket i) throws Exception, NullPointerException{
                incoming =i;
        }
        public void run() {
                try{
                                InputStream inStream = incoming.getInputStream();
                                OutputStream outStream = incoming.getOutputStream();
 
 
                                Scanner in = new Scanner(inStream);
                                PrintWriter out = new PrintWriter(outStream, true); //tu tworzysz zmienną lokalną o takiej samej nazwie jak pole w klasie, powinno być tak jak niżej
                                out = new PrintWriter(outStream, true);
                                out.println("DAJESZ");
 
                                Wypisz();
 
                        } catch (Exception e) {
                                e.printStackTrace();
                        }finally{
//                                        incoming.close();
                        }        
        }        
        public void Wypisz(){
                out.println("ddd"); //tutaj korzystasz z pola w klasie 
        }
        public PrintWriter out; //to pole ma wartość null
}

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