# String Array versenden



## precoc (12. Okt 2012)

hey,

ich habe ein kleines Programm geschrieben das einen einzeiligen String per Socket an eine andere IP schicken kann. Das funktioniert auch. Ich möchte nun allerdings ein String ARRAY über diese Socket Verbindung schicken können. Kann mir jemand erklären wie ich das in meine Klassen einbauen kann?

Vielen Dank schon mal im vorraus! 

Hier sind Nun die beiden Klassen (sendHost und receiveHost) und die beiden aufrufenden Klassen (sender und receiver).

Aus der Sender Klasse wird eine Socket Verbidung zum Host aufgebaut, der über die Receiver Klasse funktioniert am Port als Listener funktioniert bis eine Verbindung zustande gekommen ist, über diese Verbindung wird dann der einzeilige String (sendContent()) versendet und vom Receiver "ausgelesen". 

Entschuldigt meine n00bsche Schreibweise! 

receiverHost Klasse 

```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;


public class receiveHost {

	private int MSG = 1; 
	private int ERR = 1;
	
	private int receivePort = 0; 
	
	private ServerSocket server=null; 
	
	private Socket contentPaket = null; 
	
	private String content = null; 
	
	public void sendHostConfig(int MSG_set, int ERR_set){
		this.MSG = MSG_set;
		this.ERR = ERR_set;
	}
	
	public void startReceivePort(int connectPort){
		this.receivePort = connectPort;
		try {
			if(this.MSG == 1) System.out.println("Open Receive port...");
			this.server = new ServerSocket(connectPort);
			
		} catch (UnknownHostException e) {
			if(this.ERR == 1) System.err.println("Unknown Error...");
			if(this.ERR == 1)  e.printStackTrace();
            
        } catch (IOException e) {
        	if(this.ERR == 1) System.err.println("Receive Port konnte nicht öffnen..");
        	//if(ERR == 1) e.printStackTrace();
            
        }
	}
	
	public void closeReceivePort(){
		if (this.server != null){
            try {
            	this.server.close();
                if(this.ERR == 1)System.out.println("Close Receive Port...");          
            } catch (IOException e) {
            	if(this.ERR == 1)System.err.println("Port nicht zu schliessen...");
            	if(this.ERR == 1)e.printStackTrace();           	
            }
		}else{
			if(this.ERR == 1)System.err.println("Kein Port wurde geöffnet...");
		}

	}
	
	public boolean listenPortOnce(){
	while (true) {
            try {
            	 this.contentPaket = this.server.accept();
            	 readContent();
            	 return true;
            } catch (IOException e) {
            	if(this.ERR == 1)System.err.println("IOEx1...");
            	//if(ERR == 1)e.printStackTrace();
            	return false;
            }
		}
	}
	
	public String readContent(){
		try {
			BufferedReader rein = new BufferedReader(new InputStreamReader(contentPaket.getInputStream()));
			return this.content=rein.readLine();
			
		}catch (IOException e) {
        	if(ERR == 1)System.err.println("IOEx2...");
        	if(ERR == 1)e.printStackTrace();
        	return null;
        }
	}
	
	public String getContent(){
		return this.content;
	}

}
```

sendHost Klasse

```
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;


public class sendHost {
	private int MSG = 1; 
	private int ERR = 1; 
	
	private Socket socket = null;
	
	private String receiveIP = null; 
	
	private int receivePort = 0;
	
	public void sendHostConfig(int MSG_set, int ERR_set){
		this.MSG = MSG_set;
		this.ERR = ERR_set;
		//if(MSG == 1) System.out.println("Config wurde geändert...");
	}
		
	public void startSendSocket(String connectIP, int connectPort){
		this.receiveIP = connectIP;
		this.receivePort = connectPort;
		
		try {
			if(this.MSG == 1) System.out.println("Open Socket...");
			if(this.MSG == 1) System.out.println("Try Connect Receive Port...");
			this.socket = new Socket(connectIP, connectPort);
		} catch (UnknownHostException e) {
			if(this.ERR == 1) System.err.println("Unknown Host...");
			closeSendSocket();
			//if(ERR == 1)  e.printStackTrace();
        } catch (IOException e) {
        	if(this.ERR == 1) System.err.println("Receive Host hat keine Socket offen..");
        	closeSendSocket();
        	//if(ERR == 1) e.printStackTrace();
        }
	}
	
	public void closeSendSocket(){
		if (this.socket != null){
            try {
            	this.socket.close();
                if(this.ERR == 1)System.out.println("Close Socket...");
            } catch (IOException e) {
            	if(this.ERR == 1)System.err.println("Socket nicht zu schliessen...");
            	if(this.ERR == 1)e.printStackTrace();
            }
		}else{
			if(this.ERR == 1)System.err.println("Kein Socket wurde benutzt...");
		}

	}
	
	public void sendContent(String content){
		 try {
			OutputStream goOut = this.socket.getOutputStream();
            PrintStream outStream = new PrintStream(goOut, true);
            outStream.println(content);
            if(this.MSG == 1) System.out.println("Gesendeter Content: " + content);
		 }catch (UnknownHostException e) {
			//FEHLER
			if(this.ERR == 1) System.err.println("Unknown Host...");
			if(this.ERR == 1)  e.printStackTrace();
        } catch (IOException e) {
        	if(this.ERR == 1) System.err.println("Conent konnte nicht gesendet werden..");
        }
	}
	
}
```

Und hier die beiden aufrufenden Klassen

sender Klasse

```
public class Sender {
	/*
	 * Dies ist nur ein Beispiel zum Senden eines Strings
	 */
	public static void main(String[] args) {
		//Neuer Send Host wird erstellt
		sendHost sHOST = new sendHost();	
		
		//Send Host wird eingestellt
		sHOST.sendHostConfig(0,0);
		
		//Send Host Socket wird geöffnet
		sHOST.startSendSocket("localhost", 1237);
		
		//Sende Content
		sHOST.sendContent("Dies ist ein Test Content1");
		
		//Send Host Socket wird geschlossen
		sHOST.closeSendSocket();
		
	}
	
}
```

Receiver Klasse

```
public class Receiver {
	/*
	 * Dies ist nur ein Beispiel zum Erhalten eines Strings
	 */
	public static void main(String[] args) {
		//Neuer Send Host wird erstellt
		receiveHost rHOST = new receiveHost();	
		
		//Send Host wird eingestellt
		rHOST.sendHostConfig(1,1);
		
		//Send Host Socket wird geöffnet
		rHOST.startReceivePort(1237);
		
		//Listener Start
		rHOST.listenPortOnce();
		
		//Ausgabe des Content
		System.out.println("Das hat der Receive Host bekommen: " + rHOST.getContent());
		
		//Send Host Socket wird geschlossen
		rHOST.closeReceivePort();
		
	}
}
```


----------



## BRoll (12. Okt 2012)

Wärs nicht einfacher den String Array in einen String umzuwandeln?
Dh. du schreibst die ganzen Strings aus dem Array hintereinander in einen
String rein, jeweils mit einem Trennzeichen.
Und danach kannst du ja beim anderen nach dem Trennzeichen
den String wieder zerlegen in ein Array.


----------



## precoc (12. Okt 2012)

ja das währe natürlich möglich .. hatte nur gedacht das es vielleicht irgendwie geht das man direkt nen ganzen Array irgendwie überträgt..  . vielleicht hat ja jemand anders ne Idee ^^ aber danke schonmal!


----------



## ThisIsJaavaaa (12. Okt 2012)

Warum nich jeden String senden?


```
for(final String content: meinStringArray)
{
    outStream.println(content);
}
```

und wieder lesen:

```
String line;
while((line = rein.readLine()) != null)
{
    // // Array geht schlecht, weil es hier keine Länge gibt
}
```


----------



## precoc (12. Okt 2012)

oki doki danke  ich werds so mal ausprobieren!


----------



## precoc (12. Okt 2012)

auch wenn das jetzt nicht direkt zum oben genannten thema passt, aber gibt es eine möglichkeit die verbundenen Hosts anzeigen zu lassen vom Receiver ? ^^


----------



## troll (12. Okt 2012)

schon mal in die doc geschaut ? [japi]Socket[/japi]


----------



## anti-held (24. Okt 2012)

Du verwendest in deinem Programm einen Printstream.
Wenn du einen ObjectOutputStream verwenden würdest, könntest du auch serialisierte Objekte übertragen!
Wird halt dann beim empfangen auch als Object behandelt und muss wieder in ein Sting[] gecastet werden.
Für das casten würde ich den instanceof test empfehlen.


----------

