# server und client 'sauber' trennen.



## marek (19. Dez 2005)

zuerst den code: 

```
public class OlliServer1{
	
	ServerSocket server;
	Socket client;
    InputStream in;
    OutputStream out;

    public OlliServer1(int port){
		super();
		try{
			server=new ServerSocket(port);
		}catch(IOException e){}
	}
    
    public boolean erwarteClient(int waitmillis){
    	boolean ret=false;
    	try{
        	server.setSoTimeout(waitmillis);
    		client=server.accept();
		    in=client.getInputStream();
		    out=client.getOutputStream();
		    ret=true;
    	}catch(IOException e){}
    	return ret;
    }
    
    public void trenneVonClient(){
        //????
    }
    
    public void send(byte[] nachricht){
    	try{
    		out.write(nachricht);
		}catch(java.lang.Throwable exc){}
    }
    
    public void receive(byte[] nachricht,int waitmillis){
    	try{
        	server.setSoTimeout(waitmillis);
    		in.read(nachricht);
    	}catch(java.lang.Throwable exc){}
    }
}
```


```
public class OlliClient1{
	
    Socket server;
    InputStream in;
    OutputStream out;

    public OlliClient1(){
		super();
    }
    
    public boolean verbindeMitServer(String ip,int port){
    	boolean ret=false;
		try{
			server=new Socket(ip,port);
			in=server.getInputStream();
			out=server.getOutputStream();
			ret=true;
		}catch(IOException e){}
		return ret;
    }
    
    public void trenneVonServer(){
        //????
    }
    
    public void send(byte[] nachricht){
    	try{
    		out.write(nachricht);
    	}catch(java.lang.Throwable exc){}
    }
    
    public void receive(byte[] nachricht,int waitmillis){
    	try{
    		server.setSoTimeout(waitmillis);
    		in.read(nachricht);
    	}catch(java.lang.Throwable exc){}
	}
    
}
```


```
public class NetzwerkTester1 {
	
	public NetzwerkTester1() {
		super();
	}
	
	public static void main(String args[])throws IOException{
		String myIP=InetAddress.getLocalHost().getHostAddress();
		OlliServer1 os=new OlliServer1(1111);
		OlliClient1 oc=new OlliClient1();
		oc.verbindeMitServer(myIP,1111);
		os.erwarteClient(1);
		byte[] b11={6,2};
		byte[] b12=new byte[2];
		byte[] b21=new byte[1];
		byte[] b22=new byte[1];
		oc.send(b11);
		os.receive(b12,1);
		b21[0]=(byte)(b12[0]*b12[1]);
		os.send(b21);
		oc.receive(b22,1);
		System.out.println(b22[0]);
	}
}
```

server und client werden verbunden. 
der client stellt dem server eine multiplikationsaufgabe, 
der server schickt die lösung zurück. 

jetzt will ich die verbindung wieder trennen, so dass ich server und client wiederverwenden kann - also danach mit anderen oder wieder mit each other verbinden kann um z.B. die aufgabe nochmal auszuführen. 

verstehtah?? 

mfg, marek


----------



## marek (20. Dez 2005)

ok gelöst. 
war eigentlich einfach: 

```
public void setNull(){
    	try{
    		server.close();
		}catch(IOException e){}
		server=null;
		client=null;
		in=null;
		out=null;
		if(server!=null || client!=null || in!=null || out!=null)System.out.println("ACHTUNG: nicht null!");
    }
```

...thema geschlossen


----------



## Illuvatar (20. Dez 2005)

Geschlossen? Nun gut, mach ich 

Nur noch so btw: Wenn die if Abfrage true zurückgibt ist eh dein Java im Arsch...

_*closed*_


----------

