Textchat Funktioniert nur halb

MrXeth

Aktives Mitglied
moin, mein Textchat funktioniert nur halb, also, wenn ich einen Client sich in den Server einwählen lasse, funktioniert das ganze bei der ersten Nachricht, aber dann nicht mehr.

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;

public class Server {
   
    private int port;
    private ServerSocket server;
    private ArrayList<PrintWriter> clientWriterList;
   
    public Server() {
        this(5555);
    }
    public Server(int port) {
        this.port = port;
    }

    public static void main(String[] args) {
        Server s = new Server();
        if(s.runServer()) {
            s.listenToClients();
        } else {
            System.out.println("Fehler!");
        }
    }
    private class Handler implements Runnable {
       
        Socket client;
        BufferedReader reader;
       
        public Handler(Socket client) {
            try {
                this.client = client;
                reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        @Override
        public void run() {
            String message;
            try {
                while((message = reader.readLine()) != null) {
                    System.out.println(message);
                    sendToAllClients(message);
                    message ="";
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    private boolean runServer() {
        try {
            server = new ServerSocket(port);
            System.out.println("Server wurde gestartet!");
            clientWriterList = new ArrayList<PrintWriter>();
            return true;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }
    }
    private void listenToClients() {
        while(true) {
            try {
                Socket client = server.accept();
                PrintWriter writer = new PrintWriter(client.getOutputStream());
                clientWriterList.add(writer);
                Thread clientThread = new Thread(new Handler(client));
                clientThread.start();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    private void sendToAllClients(String message) {
        Iterator it = clientWriterList.iterator();
       
        while(it.hasNext()) {
            PrintWriter writer = (PrintWriter) it.next();
            writer.println(message);
            writer.flush();
               
        }
    }
}
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    private String address;
    private int port;
    private Socket client;
    private PrintWriter writer;
    private BufferedReader reader;
   
    public Client() {
        this("localhost", 5555);
    }
   
    public Client(String address, int port) {
        this.address = address;
        this.port = port;
    }
   
    public static void main(String[] args) {
        Client c = new Client();
        c.start();
    }
    public class MessagesFromServerListener implements Runnable {

        @Override
        public void run() {
            String message;
            try {
                while((message = reader.readLine()) != null ) {
                    System.out.println(message);
                }
            } catch (IOException e) {
                System.out.println("Nachricht konnte nicht empfangen werden");
                e.printStackTrace();
            }
        }
       
    }
    private void start() {
        if(!connectedToServer()) {
            System.out.println("Nicht verbunden!");
        }
        Scanner sc = new Scanner(System.in);
        sendMessageToServer(new Scanner(System.in).nextLine());
       
        Thread t = new Thread(new MessagesFromServerListener());
        t.start();
    }

    private boolean connectedToServer() {
        try {
            client = new Socket(address, port);
            reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
            writer = new PrintWriter(client.getOutputStream());
            System.out.println("Verbindung hergestellt");
            return true;
        } catch (IOException e) {
            System.out.println("Verbindung fehlgeschlagen");
            e.printStackTrace();
            return false;
        }
    }
   
    private void sendMessageToServer(String message) {
        writer.println(message);
        writer.flush();
    }
}
Danke für eure hilfe
 

MrXeth

Aktives Mitglied
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;

public class server {
    private BufferedReader fromClient;
  
    private ArrayList<Socket> clientList;
    private ServerSocket server;
  
    public server() {
        this(9898);
    }
    public server(int port) {
        try {
            server = new ServerSocket(port);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
  
    public void main(String []args) {
        new server().start();
    }
  
    public void start() {
        waitForClients(5);
    }
  
    private void waitForClients(int amount) {
        int i = 0;
        while(i <= 5) {
            Socket client = null;
          
            try {
                client = server.accept();
                clientList.add(client);
                Thread clientThread = new Thread(new messageWriter(client));
                i += 1;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
  
    private void sendToAllClients(String message) {
        Iterator it = clientList.iterator();
      
        while(it.hasNext()) {
            messageWriter client = (messageWriter) it.next();
            client.sendMessage(message);
        }
    }
  
    public void receiverQueue() {
        while(true) {
            for(int i = 0; i < clientList.size(); i++) {
                try {
                    fromClient = new BufferedReader(new InputStreamReader(clientList.get(i).getInputStream()));
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                String message = null;
                try {
                    while((message = fromClient.readLine()) == null) {}
                } catch (IOException e) {
                    break;
                }
                sendToAllClients(message);
            }
        }
    }
  
    private class messageWriter implements Runnable {
        private Socket clientSocket;
        private PrintWriter toClient;
      
        public messageWriter(Socket clientSocket) {
          
            this.clientSocket = clientSocket;
            try {
                fromClient = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                toClient = new PrintWriter(clientSocket.getOutputStream(), true);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
      
        public void run() {
        }
      
        protected void sendMessage(String message) {
            toClient.println(message);
            toClient.flush();
        }
      

    }
}

Funktioniert das ? Die Queue soll bewirken, dass immer nur ein Client senden kann. Habe leider noch keinen Client dazu geschrieben

Danke für antworten
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
JavaDevOp Socket Status von UDP-Port prüfen (PortUnreachableException funktioniert nicht?) Netzwerkprogrammierung 32
B Multicast-Nachrichten-Empfang funktioniert nicht Netzwerkprogrammierung 5
S BufferedStream funktioniert nicht immer Netzwerkprogrammierung 7
G UDP Packet empfangen funktioniert nicht. Netzwerkprogrammierung 16
Dann07 Proxy funktioniert nicht so wie gewünscht! Netzwerkprogrammierung 18
H Einfacher Server funktioniert nicht Netzwerkprogrammierung 1
N Test Servlet funktioniert nicht Netzwerkprogrammierung 11
J FTP Upload über Proxy funktioniert nicht Netzwerkprogrammierung 1
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
KingSquizzi3 Website parsen mit Hilfe von jsoup funktioniert nicht Netzwerkprogrammierung 3
V TCP Client funktioniert auf Emulator aber nicht auf Smartphone Netzwerkprogrammierung 5
N RMI "RMI über Lan funktioniert nicht" & "RMI-Server im Lan scannen" Netzwerkprogrammierung 13
G Mail senden funktioniert nicht mit SSL Netzwerkprogrammierung 7
L IText mit Servlets, funktioniert nicht Netzwerkprogrammierung 0
D TCP Socket funktioniert nicht richtig Netzwerkprogrammierung 3
L Email versenden mit Java funktioniert nicht, Fehlermeldungen: MessagingException & SocketException Netzwerkprogrammierung 10
C Portscanner funktioniert nicht! Netzwerkprogrammierung 8
K Chatprogramm - Server funktioniert nicht Netzwerkprogrammierung 5
G FTP FTP-Client funktioniert nicht bei Modem-Verbindungen Netzwerkprogrammierung 8
D JNLP über Webstart funktioniert nicht... Netzwerkprogrammierung 2
M HTTP File Upload mit Prozessbar Funktioniert nicht. Netzwerkprogrammierung 8
J FTP FTP funktioniert nicht. Netzwerkprogrammierung 5
R Client funktioniert nicht Netzwerkprogrammierung 2
M while-Schleife funktioniert nicht bei Nachrichtempfang von Server Netzwerkprogrammierung 3
L Socket Chat funktioniert nicht Netzwerkprogrammierung 2
D ...class.getResourceAsStream("/meine.properties") funktioniert nicht über RMI? Netzwerkprogrammierung 3
S RMI Methodenaufruf funktioniert nur lokal Netzwerkprogrammierung 11
C Java Chat funktioniert nicht richtig Netzwerkprogrammierung 6
V Quelltaxt einer Website auslesen funktioniert nicht Netzwerkprogrammierung 2
A RMI RMI Methodenaufruf funktioniert nur spontan Netzwerkprogrammierung 5
S RMI RMI-Applet kommunikation funktioniert nicht Netzwerkprogrammierung 8
D FTP Pfadangabe für ftp-upload funktioniert nicht Netzwerkprogrammierung 5
A Socket UnknownHostException funktioniert nicht! Netzwerkprogrammierung 3
B Socket Daten empfangen funktioniert nicht richtig - wo liegt der Fehler? Netzwerkprogrammierung 7
M chat funktioniert nicht (Connection refused: connect) Netzwerkprogrammierung 3
R Java-Chat-Applet funktioniert nur in Eclipse Netzwerkprogrammierung 3
T RMI - Client Zugriff auf Server funktioniert nicht Netzwerkprogrammierung 5
M RMI, cast funktioniert nich Netzwerkprogrammierung 2
P Bilder: FTP-Upload funktioniert nicht richtig Netzwerkprogrammierung 2
G Datein versenden funktioniert nicht ! Netzwerkprogrammierung 19
W RMI funktioniert nur wenn ich im selben Eclipse Projekt bin Netzwerkprogrammierung 3
S OutputStreamWriter funktioniert nicht wie ich will Netzwerkprogrammierung 2
M serialisierung funktioniert nur nach neuer instanzierung Netzwerkprogrammierung 3
G Google-Suche funktioniert nicht Netzwerkprogrammierung 6
S Server - Telnet funktioniert, Server - Client nicht Netzwerkprogrammierung 3
F SimpleFTP funktioniert nicht Netzwerkprogrammierung 6
N UDP zwischen Java und C++ funktioniert nicht. Netzwerkprogrammierung 4
L JavaMail: Versenden von mails funktioniert nicht Netzwerkprogrammierung 7
Kr0e Datenaustausch trotz NIO nur halb so schnell Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben