# Socket Client-Server Verbindung. Wie Strings senden?



## Wastl (9. Apr 2007)

Im Moment arbeite ich mich in die Netzwerkprogrammierung ein. Dazu hab ich einen DemoServer mit einem Serversocket und einen Client der eine Verbindung zum Server herstellt.
Im Moment schicke ich vom Client zwei Integer an den Server, dieser addiert sie und gibt das Ergebnis zurück. Klappt einwandfrei.
Wenn ich jetzt jedoch einen String wie "Hello World" senden möchte dann klappt das nicht. Soweit ich mich informiert habe, liegt das daran dass über eine Socketverbindung nur Bytes gesendet werden können.
Hier http://www.java-forum.org/de/viewtopic.php?t=6033 wird ein BufferedWriter verwendet um Strings senden zu können.

Kann mir jemand das Problem mit den Sockets und was man darüber übertragen kann nochmal erklären, so ganz klar ist mir das immer noch nicht.


----------



## Wildcard (9. Apr 2007)

Was bedeutet 'klappt nicht'?
Wie sieht dein relevanter Code aus?


----------



## Wastl (9. Apr 2007)

Was funktioniert ist folgendes:
Server:

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

public class KleinerServer2 {
	ServerSocket server = new ServerSocket(1234);
	
	KleinerServer2() throws IOException{
		while(true){
			Socket client = server.accept();
			InputStream input = client.getInputStream();
			OutputStream output = client.getOutputStream();
			int zahl1 = input.read();
			int zahl2 = input.read();
			output.write(zahl1+zahl2);
			output.flush();
			input.close();
			output.close();
		}
	}
	public static void main(String[] argv){
		try {
			KleinerServer2 server = new KleinerServer2();
		}
		catch(IOException e){
			System.out.println(e);
		}
	}
}
```

Client:

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

public class Client {
	Client() throws IOException{
		Socket server = new Socket ("localhost",1234);
		InputStream input = server.getInputStream();
		OutputStream output = server.getOutputStream();
		output.write(5);
		output.write(10);
		output.flush();
		System.out.println(input.read());
		server.close();
		input.close();
		output.close();
	}
	public static void main (String[] argv){
		try{
			Client client = new Client();
		}
		catch(IOException e){
			System.out.println(e);
		}
	}
}
```

Mein Problem ist jetzt, wie übertrage ich einen String?


----------



## skl66gast (17. Apr 2007)

ich bin auch programmieranfänger und auf das gleich problem gestoßen. hat jemand eine lösung parat?


----------



## HoaX (17. Apr 2007)

dann mach es doch so wie in dem von dir genannten thread? erstell dir einen BufferedWriter und schreib damit den string. oder alternativ gibt es auch String.getBytes(String)
womit du bytes erhälst die du mittels des passenden konstruktors wieder zum string umwandeln kannst.


----------



## homer65 (18. Apr 2007)

Ich benutze zur Übertragung immer einen ObjectOutputStream bzw ObjectInputStream. Damit kann man beliebige Objecte übertragen, insbesondere Strings.


----------



## red99 (21. Apr 2007)

so kann man das ganz einfach umschreiben  :

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

public class KleinerServer2 {
   ServerSocket server = new ServerSocket(4444);
   
   KleinerServer2() throws IOException{
      while(true){
         Socket client = server.accept();
         BufferedReader input = new BufferedReader(new InputStreamReader(client.getInputStream()));
         BufferedWriter output = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
         int int1 = Integer.parseInt(input.readLine());
         int int2 = Integer.parseInt(input.readLine());
         String int3 = Integer.toString(int1 + int2);
         System.out.println(int3);
         output.write(int3);
         output.flush();
         input.close();
         output.close();
      }
   }
   public static void main(String[] argv){
      try {
         KleinerServer2 server = new KleinerServer2();
      }
      catch(IOException e){
         System.out.println(e);
      }
   }
}
```


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

public class KleinerClient {
   KleinerClient() throws IOException{
      Socket server = new Socket ("localhost",4444);
      BufferedReader input = new BufferedReader(new InputStreamReader(server.getInputStream()));
      BufferedWriter output = new BufferedWriter(new OutputStreamWriter(server.getOutputStream()));
      output.write("5" + "\r\n");
      output.write("10" + "\r\n");
      output.flush();
      System.out.println(input.readLine());
      server.close();
      input.close();
      output.close();
   }
   public static void main (String[] argv){
      try{
         KleinerClient client = new KleinerClient();
      }
      catch(IOException e){
         System.out.println(e);
      }
   }
}
```


----------

