Hinz Geschrieben 7. Mai 2009 Geschrieben 7. Mai 2009 Hallo, ich soll ein Chat Programm programmieren, aus den beiden Programmen Client und Server, die ich schon programmiert habe. Die soll ich zu einem Chat Programm verbinden. Kann mir jemand helfen? Wie muss ich das machen? Wie sieht dann der Quellcode aus? Vielen Dank. Java: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; import java.util.Scanner; public class Client implements Runnable { private String host = "192.168.178.9"; public Client(String host) { if (host != null) { this.host = host; } } @Override public void run() { Socket s = null; BufferedReader in = null; BufferedWriter out = null; try { s = new Socket(host, 8888); in = new BufferedReader(new InputStreamReader(s.getInputStream())); out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); Scanner console = new Scanner(System.in); while (true) { out.write(console.nextLine() + "\n"); out.flush(); } } catch (IOException e) { e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } if (s != null) { try { s.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) { if (args.length == 0) { new Thread(new Client(null)).start(); } else { new Thread(new Client(args[0])).start(); } } } ------------------------------------------------ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class Server implements Runnable { @Override public void run() { ServerSocket ss = null; Socket s = null; BufferedReader in = null; BufferedWriter out = null; try { ss = new ServerSocket(8888); s = ss.accept(); in = new BufferedReader(new InputStreamReader(s.getInputStream())); out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); while (true) { System.out.println(in.readLine()); } } catch (IOException e) { e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } if (s != null) { try { s.close(); } catch (IOException e) { e.printStackTrace(); } } if (ss != null) { try { ss.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) { new Thread(new Server()).start(); } } Zitieren
kingofbrain Geschrieben 7. Mai 2009 Geschrieben 7. Mai 2009 Die Frage, die sich mir stellt, ist: warum? Der Trick an einem Chat mit Client und Server ist ja, dass der Server irgendwo zentral läuft, und n Clients an anderer Stelle betrieben werden. Wenn es trotzdem gefordert ist, dann nimm den Inhalt der beiden main-Methoden, schreib ihn in eine eigene main-Methode einer neuen Klasse und fertig. Dann werden ein Server- und ein Clientprozess gestartet und betrieben. [EDIT]Ach ja, verwende für Quellcodeausschnitte bitte beim nächsten Mal die entsprechenden CODE-Tags, dann ist das besser lesbar. [/EDIT] Peter Zitieren
flashpixx Geschrieben 7. Mai 2009 Geschrieben 7. Mai 2009 Die Frage, die sich mir stellt, ist: warum? Der Trick an einem Chat mit Client und Server ist ja, dass der Server irgendwo zentral läuft, und n Clients an anderer Stelle betrieben werden. Wenn ich im Bereich P2P oder Multicast das ansiedel, dann kann es auch dezentral sein. Deine Meinung würde ich da nur begrenzt unterstützen Phil Zitieren
speedi Geschrieben 7. Mai 2009 Geschrieben 7. Mai 2009 @KoB: Dann muss man sich aber wieder brav drum kümmern, dass die Ensprechenden Ports freigegeben werden etc... @Threadstarter: Mach doch einfach in die ChatGUI nen Button: "Start Server". Wenn der Benutzer da drauf drückt, startest du den Server und verbindest den eigenen Client automatisch zu localhost. Zitieren
kingofbrain Geschrieben 7. Mai 2009 Geschrieben 7. Mai 2009 Mit dem P2P Einwand habt Ihr natürlich recht, daran habe ich nicht gedacht. Den Einwand / Hinweis von Speedi an mich verstehe ich nicht. Wenn es darum geht, dass beide Klassen die 8888 als Port verwenden - natürlich muss man hier unterschiedliche Ports angeben, das sehe ich als Selbstverständlichkeit an. @OP Erzähl mal, was Du wirklich machen sollst, sonst müssen wir hier rumspekulieren. Also nicht "ich soll die beiden in ein Programm zusammenbauen", sondern was soll hier mit diesem Programm passieren?. Peter Zitieren
AmunRa Geschrieben 12. Mai 2009 Geschrieben 12. Mai 2009 Bei P2P ist der Client auch gleichzeitig der Server. Bei einem Chat brauchst du entweder einen zentralen Server, zu dem sich alle Clienten verbinden, so wie beim Messenger ICQ, oder du gehst gleich zu P2P. Dann ist dein Client auch ein Server. Beispiel für ein P2P-Chat gibts zum Beispiel hier. Netzwerkprogrammierung in Java - Page 4 Zitieren
Vandahil Geschrieben 14. Mai 2009 Geschrieben 14. Mai 2009 In unserem letzten Client-Server-Projekt hat ein Arbeitskollege ebenfalls ein Chatprogramm geschrieben. Soviel wie ich mitbekommen habe, kann ich dir folgende Tipps geben: Lese dich mal in RMI ein... das ist einfacher als ne plumpe Socket-Verbindung Die Insel hilft dir da ganz gut Thema RMI bei java ist auch eine Insel Ein Abstecher zum Design-Pattern Observer kann auch nicht schaden. Observer(Beobachter) Ansonsten wie gesagt, ne genaue Beschreibung was ihr machen sollt wäre schon cool. Gruß, Marcel Zitieren
flashpixx Geschrieben 14. Mai 2009 Geschrieben 14. Mai 2009 Lese dich mal in RMI ein... das ist einfacher als ne plumpe Socket-Verbindung Ich glaube das Thema RMI hatten wir zu Beginn des Threads. Aber ich muss dem doch schon beipflichten, dass RMI wirklich einfach ist :-P Ansonsten wie gesagt, ne genaue Beschreibung was ihr machen sollt wäre schon cool. Full ack Phil Zitieren
VaNaTiC Geschrieben 18. Mai 2009 Geschrieben 18. Mai 2009 Ich habs an anderen Stellen schon gelesen. Bitte schiesst nicht mit Äpfeln auf Birnen. RMI ist zum Verteilen von Anwendungen (in mehreren Schichten) da. Nicht unbedingt das i-Tüpfelchen um Client-Server-lose Chats zu entwickeln. RMI hat einen Nachteil in diesem Bezug. RMI nutzt eine echte Client-Server-Struktur und bekommt Angaben zu veröffentlichten Methoden/Objekten über die RMI-Registry, die natürlich allen C+S bekannt sein muss. D.h. wenn ich eigentlich noch garkeine anderen Chatpartner kenne und keinen Masterserver habe, ist das mittels RMI nicht lösbar. Ergo daraus wird niemals ein echter Server-loser Startzustand. Das erreicht man nur mit unschönen UDP-Broadcasts im lokalen Netz oder besser mit Multicast. Multicast-Programmierung ist allerdings keine alltägliche Netzwerkprogrammierung, aber auch kein Hexenwerk. Wir hatten an anderer Stelle hier bereits Threads dazu mit OpenSource-Projekten, die Multicast Chats implementierten. Oder aber ich bin völlig falsch und seit meinen letzten Projekten mit RMI und CORBA hat sich da technisch viel verändert. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.