Chatprogramm zwischen zwei ChatClients (aktiv/passiv)

Daniel@Java

Neues Mitglied
Hallo zusammen,

ich bin gerade dabei, mich für eine Übung in die Netzwerkprogrammierung einzuarbeiten, stoße aber nun am meine Grenzen. Ziel ist es, ein Programmpaar aus Client und Server zu erstellen, mit dem Textnachrichten vom Client an den Server übermittelt werden können. Soweit so gut. Ich habe sowohl einen ChatClient und ChatServer erstellt, welche nach Start nun auch die vom Client eingegebenen Nachrichten in der Konsole des Servers ausgeben.

Jetzt kommt allerdings der Haken:

Ich soll nun das ChatClient- und -Serverprogramm zu einem "echten" Chatprogramm ausbauen, sodass eine Kommunikation zwischen zwei ChatClients ermöglicht wird, ich habe hierzu noch folgende Anweisungen bekommen:
  • Das Chat-Programm erhält über die Kommandozeile einen weiteren Parameter der angibt, ob es auf einen Verbindungsaufbau seitens eines anderen Chat-Programms warten soll (passive open), oder aber aktiv eine Verbindung zu einem anderen Chat-Programm aufbauen soll (active open).
  • Nachdem die TCP-Verbindung hergestellt ist, werden Eingaben von der Konsole (System.in) entgegen genommen und auf der Konsole (System.out) ausgegeben.


Nun meine Frage, wisst ihr wie man sowas aufbaut, geschweige denn programmiert?


Hier ist mein Chatclient:

Java:
 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class ChatClient implements Runnable {
        
        final int PORT = 8888;
        Socket client;
        
        public ChatClient(String ip){
                try {
                        client = new Socket(ip,PORT);
                } catch (UnknownHostException e) {
                        System.out.println("Der Hostname ist mir nicht bekannt. Kann nicht weiter machen");
                        System.exit(1);
                } catch (IOException e) {
                        e.printStackTrace();
                        System.exit(1);
                }
        }
        
        public ChatClient() {
                this("localhost");
        }

        @Override
        public void run() {
                boolean blank = false;
                System.out.println("Verbindung wird bei Eingabe von zwei leeren Zeilen beendet.");
                while (true) {
                        try {
                                BufferedReader data = new BufferedReader(new InputStreamReader(System.in));
                                PrintWriter sendData = new PrintWriter(client.getOutputStream());
                                String test = data.readLine();
                                if(test.equals("")){
                                        if(blank){
                                                sendData.println();
                                                if(sendData.checkError()) System.out.println("Fehler beim Senden an " + client.getInetAddress());
                                                break;
                                        }
                                        blank = true;
                                        continue;
                                }
                                sendData.println(test);
                                if(sendData.checkError()) System.out.println("Fehler beim Senden an " + client.getInetAddress());
                                Thread.sleep(10);
                        } catch (InterruptedException e) {
                                System.out.println("Problem bei der Verbindung zum Server. Vermutlich wurde sie getrennt.");
                                try {
                                        client.close();
                                } catch (IOException e1) {}
                                System.exit(1);
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
                try {
                        client.close();
                } catch (IOException e) {
                        e.printStackTrace();
                }
        }

        /**
         * @param args
         */
        public static void main(String[] args) {
                new Thread(args.length == 1 ? new ChatClient(args[1]) : new ChatClient()).run();
        }

}

Hier noch mein ChatServer:

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class ChatServer implements Runnable {
        
        final int PORT = 8888;
        ServerSocket server;

        /**
         * @param args
         */
        public static void main(String[] args) {
                new Thread(new ChatServer()).run();
        }
        
        public ChatServer() {
                try {
                        server = new ServerSocket(PORT);
                } catch (IOException e) {
                        e.printStackTrace();
                }
        }

        @Override
        public void run() {
                Socket recv;
                try {
                        recv = server.accept();
                        System.out.println(recv.getInetAddress() + " hat sich verbunden.");
                        while (recv.isConnected()) {
                                BufferedReader reader = new BufferedReader(new InputStreamReader(recv.getInputStream()));
                                String data = reader.readLine();
                                if (data.equals("")){
                                        recv.close();
                                        break;
                                }
                                System.out.println(data);
                                Thread.sleep(10);
                        }
                        System.out.println("Verbindung wurde getrennt.");
                } catch (IOException e) {
                        e.printStackTrace();
                } catch (InterruptedException e) {
                        System.out.println("Problem bei der Verbindung zum Server. Vermutlich wurde sie getrennt.");
                        System.exit(1);
                }
        }

}
 

Chloroplast

Bekanntes Mitglied
um Nachrichten aus dem stream zu lesen sind Threads notwendig, auf jeder seite einer, welche die Nachrichten aus dem Stream lesen und ausgeben. Dass ist auf beiden seiten möglich, genauso wie das senden. wenn die verbindung einmal geschaffen wurde, ist es egal auf welcher seite man sich befindet.
Also musst du nur entweder einen ServerSocket schaffen, welcher auf andere Clients wartet und mit diesem dann kommuniziert, oder ob er sich direkt verbinden soll, und das ergebnis dann weitergibt
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Chatprogramm Netzwerkprogrammierung 25
S User im Chatprogramm verschiedene Farben Netzwerkprogrammierung 1
K Chatprogramm - Server funktioniert nicht Netzwerkprogrammierung 5
S Java-Chatprogramm via Console Netzwerkprogrammierung 4
Z Socket [Chatprogramm] Mehrere Clients an einen Server Netzwerkprogrammierung 10
A Chatprogramm: Connection refused Netzwerkprogrammierung 4
Y UDP Chatprogramm auf Client/Server Basis Netzwerkprogrammierung 5
eQui Hilfe bei Chatprogramm Netzwerkprogrammierung 3
J Brauche hilfe bei Projekt: Netzwerk Chatprogramm Netzwerkprogrammierung 12
T FTP Chatprogramm probleme Netzwerkprogrammierung 2
J Chatprogramm Netzwerkprogrammierung 9
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
M Socket Netzwerk Übertragung zwischen 4 Clients Netzwerkprogrammierung 2
J VideoStreaming zwischen 2 Geräten Netzwerkprogrammierung 1
R Kommunikation zwischen Shell und Putty Netzwerkprogrammierung 5
temi (Netzwerk-) Kommunikation zwischen Anwendungen. Wie? Netzwerkprogrammierung 5
M Socket peer to peer Verbindung zwischen Java und Matlab Netzwerkprogrammierung 0
S Bluetooth Verbindung zwischen Android app und Raspberry Pi 3 Netzwerkprogrammierung 1
M Verbindung zwischen zwei Pc in dem Selben Netzwerk Netzwerkprogrammierung 8
O Client zwischen XML und JSON auswählen lassen Netzwerkprogrammierung 2
F Verbindung zwischen Server und handy Netzwerkprogrammierung 1
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
J Direkter Datenaustausch zwischen Servern Netzwerkprogrammierung 5
V Unterschied zwischen cURL und HttpURLConnection?? Netzwerkprogrammierung 2
M RMI RMI Probleme zwischen Client und Server Netzwerkprogrammierung 5
N Datenaustausch zwischen Java-GUI und PHP-Programm über SOAP Netzwerkprogrammierung 19
C HTTP Studienarbeit Kommunikation via HTTP mit POST zwischen Server und Client Netzwerkprogrammierung 7
V Datensätze zwischen verschiedenen Datenbanken kopieren Netzwerkprogrammierung 2
F Peer to Peer Verbindung zwischen mehreren Clients? Netzwerkprogrammierung 8
G Verbindung zwischen PC und Handy Netzwerkprogrammierung 10
K Datenaustausch zwischen Applet und JSP Netzwerkprogrammierung 4
C Verbindung zwischen 2 Computern herstellen Netzwerkprogrammierung 12
M Kommunikation zwischen ServerSocket und Socket Netzwerkprogrammierung 2
L RMI-Objekt zwischen zwei RMI-Servern kopieren Netzwerkprogrammierung 2
J Socketverbindung zwischen Javaclient und C-Server Netzwerkprogrammierung 11
R Kommunikationsproblem zwischen JAVA-client und C-Server Netzwerkprogrammierung 5
B Verbindung zwischen Client und Server Netzwerkprogrammierung 2
0 Socketverbindung zwischen PHP und Java? Netzwerkprogrammierung 6
G Chat zwischen applets: möglich? Netzwerkprogrammierung 2
M RMI zwischen verschiedenen Java Versionen Netzwerkprogrammierung 2
N UDP zwischen Java und C++ funktioniert nicht. Netzwerkprogrammierung 4
M Objekte senden zwischen Java und PHP mit SOAP Netzwerkprogrammierung 9
S Objekte zwischen Client und Server über Sockets senden Netzwerkprogrammierung 2
D Kommunikation zwischen mehreren Servlets??? Netzwerkprogrammierung 3
P Zeit zwischen mehreren Client log-ins bestimmen. Netzwerkprogrammierung 2
L Socket Zwei Computer im gleichen Netwerk ohne Portforwarding ? Netzwerkprogrammierung 12
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
E Zwei PCs über das Internet miteinander verbinden? Netzwerkprogrammierung 3
D Verbindung zw. zwei Rechnern funzt nicht Netzwerkprogrammierung 5
S HttpURLConnection POST splittet Daten in zwei Pakete Netzwerkprogrammierung 9
D Zwei Applikationen eine Liste? Netzwerkprogrammierung 2

Ähnliche Java Themen


Oben