# Client - Server - Server



## darkeye2 (13. Sep 2010)

Hallo,

einige von euch werden wohl das programm SAMBroadcast kennen, für alle anderen:
es sendet die musik vom rechner zu einen programm namens Shoutcast das auf einen server läuft. auf diese Weise wird Onlineradio gesendet.

Nun möchte ich eine anwendung schreiben, die eben ein verbindungsstück darstellt.

Sam soll sich mit meinen Prog verbinden und dann soll mein prog das pwd testen und wenn es stimmt den stream einfach weiterleiten.

Ich schaffe es bereits mich mit Shoutcast zu verbinden, das klappt problemlos:

```
private void setStreams(String ip){
		host = new String(ip);
		try {
			toServer = new Socket(host, 8001);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		//reader und  writer
		InputStream input = null;
		try {
			input = toServer.getInputStream();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		br = new BufferedReader(new InputStreamReader(input));
		try {
			pw = new PrintWriter(toServer.getOutputStream());
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	}
```

Allerdings scheint das mit dem Empfangen nicht so ganz zu Funktionieren, mein ServerSocket kriegt nie ne Clientanfrage:

```
server = new ServerSocket(7001);

while(live){
					System.out.println("hier");
				Socket client = server.accept();
				ch = new clientHandler(client);
				System.out.println("und hier");
				}
```

da "und hier" nie ausgegeben wird gehe ich mal davon aus, das einfach nie ein client anfragt, obwohl mein sam auf die richtige ip eingestellt ist ... (und auch auf den richtigen port)


----------



## Kr0e (13. Sep 2010)

Hmm,

aaaalso:

zuerstmal: host = new String(ip); ist unsinn^^ Du kannst host = ip schreiben. Strings sind immutable.

Aber nun zu deinem Problem:

Shoutcast ist also ein exterenes Programm (Kannte ich bis jezt nicht). Du willst das Shoutcast sich mit deinem Server verbindet anstelle von einem "richtigen" Shoutcastserver ?

 - Also du hast auch den Shoutcast Client auf Port 7001 und ip "localhost "eingestellt ?
 - Sicher, dass Shoutcast TCP und nicht UDP verwendet ? Würde Sinn machen bei Onlineradio...

Ansonsten ist dein Ansatz meiner Ansicht nach korrekt...


----------



## darkeye2 (13. Sep 2010)

ok, da hast du natürlich recht, das host = ip sinnvoller wäre^^

ja, Shoutcast ist ein externes Programm und der SAM auch normal sendet der SAM an den Shoutcast, hier soll er an mein Programm senden und mein Programm soll nur die erste zeile lesen, den rest soll es einfach an den Shoutcast weiterleiten.

Wegen TCP bin ich mir eigentlich ganz sicher, werde nochmal bei google auf die Suche gehen, und dann hier nochmal bescheidgeben, falls ich was neues weiß


----------



## Blakh (13. Sep 2010)

Wird zum streamen von media nicht meist RTP benutzt?


----------



## darkeye2 (13. Sep 2010)

es ist TCP und es klappt jetzt alles  bis auf die tatsache, dass die daten net weitergeleitet werden ... also die daten kommen aus beiden richtungen an, aber gehen nicht weiter ...


----------



## darkeye2 (13. Sep 2010)

so sieht der  code für die stream weiterleitung aus, aber irgendwie wird nix weitergeleitet:

```
public void run(final String x){
			setStreams(host);
			
			new Thread(new Runnable(){
				public void run(){
					try {
						System.out.println("wird gelesen");
						while((line1 = br.readLine()) != null){
							System.out.println(line1);
							//pwC.print(line1);
							pwC.write(line1);
							pwC.flush();
						}
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}).start();
			
			new Thread(new Runnable(){
				public void run(){
					try {
						System.out.println(x +" [wird auch gelesen]");
						pw.write(x + "\r\n");
						pw.flush();
						while((line2 = brC.readLine()) != null){
							System.out.println(line2);
							pw.write(line2);
							//pw.print(line2);
							pw.flush();
						}
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}).start();
		}
```


----------



## darkeye2 (14. Sep 2010)

scheint als würden alle ankommenden "\r\n" aus den zeilen entfernt werden, da diese einfach nicht weitergesendet werden, kann mir da jemand helfen?


----------



## Atze (14. Sep 2010)

wenn ich das richtig sehe, entfernst du die zeilenumbrüche doch (ungewollt) selbst.
du liest zeilenweise aus (readLine, trennzeichen ist hier dann wohl "\r\n"), bekommst die zeilen nacheinander ohne "\r\n", und schreibst das wieder raus, aneinandergereiht! entweder sowas wie writeLn() nutzen oder in der schleife hinter jede zeile selber "\r\n" hängen!


----------

