Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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();

}

}

Geschrieben

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

Geschrieben
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

Geschrieben

@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.

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...