# Probleme mit kleinem Messenger-Programm



## Aley (17. Apr 2008)

Hallo, ich habe ein paar kleine Probleme mit einem kleinen Messenger den ich versuchen zu schreiben. Hab noch nicht so viel Ahnung von dser Java-Programmierung und wollte bloß versuchen mal ein kleines Prog zu schreiben ^^
Also, Mein Programm basiert auf einem Server-Teil und einem Client-Teil, hab auch ein paar sachen hier aus dem Forum benutzt, hier erstmal der Quellcode
*
server.java*

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


public class server {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {

		// Server starten
		ServerSocket server = new ServerSocket(1234);
		
		// warten auf eine neue Verbindung
		Socket s = server.accept();
		
		// neue Verbindung ist da, wir lesen einfach aus,
		// was sie uns so schickt und schicken dann alles in grossbuchstaben wieder zurück
		BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
		String text = in.readLine();
		System.out.println("Text vom Client: "+text);
		BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		
		//EINE Texteingabe zurückschicken
		System.out.println("Nachricht an den Client: ");
		String temp = functions.getline();
		out.write(temp);
		out.newLine();
		out.flush();
		// aufräumen
		out.close();
		in.close();
		server.close();  

	}

}
```

*client.java*

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


public class client {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws UnknownHostException 
	 */
	public static void main(String[] args) throws UnknownHostException, IOException {

		// socket auf localhost port 1234 konstruieren
		Socket s = new Socket("192.168.15.37",1234);
		// etwas über den socket versenden
		BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		System.out.println("Nachricht an den Server: ");
		String temp = functions.getline();
		out.write(temp);
		// zeilenumbruch senden
		out.newLine();
		out.flush();


		// BufferedReader konstruieren
		BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
		// eine zeile lesen
		String text = in.readLine();
		// und ausgeben
		System.out.print("Text vom Server: ");
		System.out.println(text);

		// am ende schliessen wir alle offenen Reader und Writer, der Socket wird dabei automatisch geschlossen
		out.close();
		in.close();

	}

}
```

*functions.java*

```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;


public class functions {
	

/******Funktion um EINE Texteingabe von der Tastatur einzulesen**************************/
	static String getline() throws IOException{		
		
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String line;
			line = in.readLine();	
		in.close();						
		return line;
	}
/****************************************************************************************/
	
}
```

Also meine Probleme:
1. Ich kann vom Client nur EINE nachricht senden und vom Server nur EINMAL antworten, wie kann ich es realisieren das ich mehrere Nachrichten schicken kann?
2. Wie kann ich es realisieren das ich in dem Programm im Client die IP des Servers eingeben kann, zur Zeit ändere ich die IP immer nur im quellcode, aber irgendwann soll ja auch jemand das prog benutzen der nicht programmieren kann.

Für alle Anregungen, Lösungen oder Internetseiten woch ich das anchlesen kann wär ich sehr dankbar, also vielen dank schon im voraus für eure hilfe.

lg alex


----------



## SlaterB (17. Apr 2008)

>  wie kann ich es realisieren das ich mehrere Nachrichten schicken kann?

höre auf, die Sockets sofort zu closen und rufe mehrmals 
out.write(temp); 
out.newLine(); 
out.flush(); 
auf??
jedesmal wird eine Zeile geschrieben, wenn du das mehrmals machen möchtest, dann tue/ programmiere es doch einfach,
Quelltext kann man ja mit einem Editor editieren 

auch den Reader auf System.in solltest du evtl. nicht gleich schließen, sonst kannst du nix mehr von der Konsole einlesen

--------
> Wie kann ich es realisieren das ich in dem Programm im Client die IP des Servers eingeben kann

na du liest doch jetzt schon etwas von der Konsole ein, da kann also auch jemand die IP eintippen?
oder du verwendest eine graphische Oberfläche,

oder du übergibst einen Parameter beim Programmstart:
java Client 10.23.18.233


----------



## Aley (17. Apr 2008)

Wegen der IP, ich hatte schon versucht die per System.in einzulesen, aber da hat das prog jedesmal ein haufen excepitons geworfen, ka warum. ich hab sie immer in der for 192.168.15.37 eingegeben, solange ich die ip direkt in den quellcode geschrieben haben hat das auch funktioniert, aber wenn ich sie eingelesen hab (über tastatur) ging nichts mehr :-(


----------



## SlaterB (17. Apr 2008)

> ka warum.

ich weiß es auch nicht hellseherisch,
bin mir aber sicher, dass es dafür gute Gründe gibt,

ich kann dich also nur ermutigen, dass ganze nochmal zu versuchen,
evtl. Fehler hier genau zu dokumentieren + Quellcode + Eingabe usw.

besser naürlich aus einem Lehrbuch selber lernen und verstehen 
aber es geht auf jeden Fall, vertraue der Macht


----------



## Aley (17. Apr 2008)

xD ... naja, ich werd ma mein glück versuchen, ich dank dir auf jeden fall für deine schnelle antwort  und zur not frag ich nächste woche nochma meinen dozenten, da krieg ich bestimmt noch plustpunkt für die freiwillige arbeit die ich mir mach ;-)


----------

