Nachricht an mehrere Clients schicken

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hab mal einen neuen Thread der übersichtlichkeit halber aufgemacht.

Code:
import java.net.*;
import java.io.*;
import java.util.List;


public class Server extends Thread {

    Boolean isStarted = false;
    ServerSocket server;
    Socket client;
    DataOutputStream out;
    DataInputStream in;
    List<Socket> list;
    
    
    
    @Override
    public synchronized void run() {
        try {
            server = new ServerSocket(4000);
        } catch (IOException ex) {
            System.out.println("Probleme mit Socket");
        }
        while (isStarted) {
            try {
                client = server.accept();
                list.add(client);
                in = new DataInputStream(client.getInputStream());
                out = new DataOutputStream(client.getOutputStream());

                String chatNachricht = in.readUTF();
                System.out.println(chatNachricht);
                out.writeUTF(chatNachricht);
                out.flush();
                in.close();
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        try {
            server.close();
            client.close();
        } catch (IOException ex) {
            System.out.println("put");
        }

    }

    
    public List getClients() {
        return list;
    }
    
    public void removeClient(Socket client) {
        list.remove(client);
    }
    
    public void setOffline() {
        isStarted = false;
    }

    public void setOnline() {
        isStarted = true;
    }
}

das ist mein ansatz.
wie kann ich denn jetzt definieren, dass an alle clients aus der liste eine meldung geshcickt wird.
 
S

SlaterB

Gast
zunächst doch ganz simple

writeToAll(String x) {
for (Socket s : list) {
s.send(x);
}
}

du solltest aber nicht den Socket speichern und dann in den Output direkt schreiben während an anderer Stelle vielleicht ein DataOutputStream darauf besteht,
speichere lieber höhere Objekte mit Socket, in, out usw.

-----

wenn du die Verbindung zum Client oder zumindest die entsprechenen Streams wenige Millisekunden nach dem Zustandekommen schließt (Zeile 36/37),
dann bringt es dir nichts, diese in einer Liste zu sammeln ;)
 
G

Guest

Gast
wenn du die Verbindung zum Client oder zumindest die entsprechenen Streams wenige Millisekunden nach dem Zustandekommen schließt (Zeile 36/37),
dann bringt es dir nichts, diese in einer Liste zu sammeln ;)

hmmm aber die werden doch nur geshclossen, sofern die while schleife false ergit... und das ist der fall, wenn der server beendet wird.


writeToAll(String x) {
for (Socket s : list) {
s.send(x);
}
}

ok... :)



du solltest aber nicht den Socket speichern und dann in den Output direkt schreiben während an anderer Stelle vielleicht ein DataOutputStream darauf besteht,
speichere lieber höhere Objekte mit Socket, in, out usw.

das wiederrum verstehe ich leider nicht ganz. ich habe doch eine liste mit sockets, welch höheres element soll ich dnen nehmen?
 
S

SlaterB

Gast
> hmmm aber die werden doch nur geshclossen, sofern die while schleife false ergit

ich glaube diesmal habe ich genau genug hingeschaut,
ich schrieb extra die Zeilennummern dazugeschrieben, da steht eindeutig close(),
die Verbindung mag dann noch offen sein, aber in einen geschlossenen Stream kannst du nichts mehr reinschreiben

> welch höheres element soll ich dnen nehmen?

public class ClientData {

private Socket socket;
private DataOutputStream out;
...

}
 
G

Guest

Gast
SlaterB hat gesagt.:
> hmmm aber die werden doch nur geshclossen, sofern die while schleife false ergit

ich glaube diesmal habe ich genau genug hingeschaut,
ich schrieb extra die Zeilennummern dazugeschrieben, da steht eindeutig close(),
die Verbindung mag dann noch offen sein, aber in einen geschlossenen Stream kannst du nichts mehr reinschreiben

aber zu dem zeitpunkt wo die geschlossen sind soll doch auch nichts mehr reingeschrieben werden?!
naja ich mach mich mal daran eine neue klasse für die sockets zu erstellen (man nentn sowas bean oder?)
 
G

Guest

Gast
Code:
import java.io.DataOutputStream;
import java.net.Socket;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


/**
 *
 * @author bmr
 */
public class ClientData {

private Socket socket; 
private DataOutputStream out; 


    public ClientData(Socket socket, DataOutputStream out) {
        this.socket = socket;
        this.out = out;
    }

    
}
 
S

SlaterB

Gast
> aber zu dem zeitpunkt wo die geschlossen sind soll doch auch nichts mehr reingeschrieben werden?!

wie gesagt ist dieser Zeitpunkt aber schon 3 ms nachdem die Verbindung überhaut erstellt wurde,
ich rede immer noch von Zeile 36/37, du denkst wahrscheinlich an 43/44
 
G

Gast

Gast
ach ok dieses mal hatte ich tomaten auf den augen.
soll ich diese streams also alle offen lassen?
 
G

Guest

Gast
Code:
import java.net.*;
import java.io.*;
import java.util.List;


public class Server extends Thread {

    Boolean isStarted = false;
    ServerSocket server;
    Socket client;
    DataOutputStream out;
    DataInputStream in;
    List<ClientData> list;
    
    
    
    @Override
    public synchronized void run() {
        try {
            server = new ServerSocket(4000);
        } catch (IOException ex) {
            System.out.println("Probleme mit Socket");
        }
        while (isStarted) {
            try {
                client = server.accept();
                in = new DataInputStream(client.getInputStream());
                out = new DataOutputStream(client.getOutputStream());
                String chatNachricht = in.readUTF();
                out.writeUTF(chatNachricht);
                out.flush();
                list.add(new ClientData(client, out));
                System.out.println(chatNachricht);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        try { 
            server.close();
            client.close();
        } catch (IOException ex) {
            System.out.println("put");
        }

    }

    
    public void writeToAll(String x) {
         for (ClientData d : list) {
             
         }
    }
    
    public List getClients() {
        return list;
    }
    
      
    public void removeClient(Socket client) {
        list.remove(client);
    }
    
    public void setOffline() {
        isStarted = false;
    }

    public void setOnline() {
        isStarted = true;
    }
}
 
S

SlaterB

Gast
offen klingt besser, ja

die Liste kannst du übrigens nun nutzen, um am Ende alle Clients zu schließen,
nicht nur den (letzten) in der Exemplarvariable client
 
G

Gast

Gast
ok danke ich werd es nachher mal versuchen das ganze jetzt umzusetzen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
L Socket Wie kann ich checken ob ein User eine Nachricht per Outputstream an den Server gesendet hat? Netzwerkprogrammierung 1
T Socket jamod WriteMultipleRegistersRequest ist keine ModBus/TCP Nachricht Netzwerkprogrammierung 1
Sogomn IRC-Nachricht Regex Netzwerkprogrammierung 0
H Socket Java | Server sendet Nachricht nur wenn vorher eine JOptionPane-Nachricht ausgegeben wurde. Netzwerkprogrammierung 2
M Nur die erste Nachricht kommt beim Server an Netzwerkprogrammierung 11
I Server schickt eine Nachricht an Broadcast Netzwerkprogrammierung 2
J Nachricht kommt erst nach beendigung der Anwendung an Netzwerkprogrammierung 4
G Nachricht an Server unverändert Netzwerkprogrammierung 2
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
B Nachricht über Sockets kommt nicht an Netzwerkprogrammierung 8
A JavaMail Problem - Nachricht wird nicht versendet ? Netzwerkprogrammierung 9
H SOAP-Nachricht mit Java Netzwerkprogrammierung 8
G Nachricht von server an alle clients senden Netzwerkprogrammierung 6
M wichtig!! Bitte!! (Nachricht von Server an Client senden) Netzwerkprogrammierung 2
izoards Mehrere TCP Verbindungen auf einen Server [alles Local] Netzwerkprogrammierung 2
Aruetiise Socket Mehrere Clients Netzwerkprogrammierung 4
E Mehrere Sockets Netzwerkprogrammierung 2
C Mehrere Spielewelten im Multiplayer Netzwerkprogrammierung 2
J Framework mehrere Clients/ Server-Broadcast/oracle XE/ XML Netzwerkprogrammierung 1
V Server / mehrere Clients / MySQL / Konzept Netzwerkprogrammierung 2
S Server - Mehrere Klassen sollen Daten senden und empfangen Netzwerkprogrammierung 25
Creylon Socket Mehrere gleichzeitig eingehende Nachrichten Netzwerkprogrammierung 8
N SOCKET mehrere Requests, keep Alive serverspezifisch? Netzwerkprogrammierung 3
7 Mehrere Verbindungen gleichzeitig in einem Thread mit ApacheHTTP Netzwerkprogrammierung 7
Z Socket [Chatprogramm] Mehrere Clients an einen Server Netzwerkprogrammierung 10
V Authentifikation über mehrere Server? Netzwerkprogrammierung 3
G Socket Mehrere Clientanmeldungen am Server Netzwerkprogrammierung 13
D Mehrere Clients über Java-Sockets Netzwerkprogrammierung 13
cedi Socket Mehrere Clients an einem Server Netzwerkprogrammierung 4
B SSH mit Jsch, mehrere Befehle senden Netzwerkprogrammierung 4
F Socket Verbindungen über mehrere Server Netzwerkprogrammierung 4
M Jetty Konfiguration mehrere Handler? Netzwerkprogrammierung 2
F UDP Server - mehrere Pakete auf einmal Netzwerkprogrammierung 12
A Mehrere gleich Packete behandeln Netzwerkprogrammierung 4
L Socket Chat Server für mehrere Clients Netzwerkprogrammierung 7
R mehrere MySQL-Zugriffe Netzwerkprogrammierung 3
B Paralleler Dateitransfer: Ein Client - Mehrere Sockets? Wie connecten? Netzwerkprogrammierung 16
S Mehrere Attachments mit JavaMail API auslesen Netzwerkprogrammierung 3
O Mehrere Datei per DataInput/OutputStream über Socket Netzwerkprogrammierung 12
A Datenverteilung: Mehrere Threads verwenden? Netzwerkprogrammierung 4
T Netzwerkchat Problem: Mehrere Nachrichten ~ Anfängerproblem Netzwerkprogrammierung 3
W Bestimmt IP Adresse verwenden wenn man mehrere hat Netzwerkprogrammierung 5
D Clients sollen mehrere Sessions starten Netzwerkprogrammierung 11
A Jakarta Commons HTTPClient: Mehrere Requests gleichzeitig Netzwerkprogrammierung 2
R Mehrere Dateien über einen Socket senden Netzwerkprogrammierung 2
L mehrere Streams über einen Socket? Netzwerkprogrammierung 8
V Mehrere Streams durch einen Stream senden Netzwerkprogrammierung 14
E Mehrere / bestimmte Netzwerkkarten ansteuern Netzwerkprogrammierung 10
F Mehrere Attachments mit JavaMail API Netzwerkprogrammierung 2
G Proxy und mehrere Verbindungen Netzwerkprogrammierung 4
G Mehrere SSL Verbindungen Netzwerkprogrammierung 2
A Mit Client auf mehrere Server zugreifen Netzwerkprogrammierung 5
M Mehrere Ports gleichzeitig abhören Netzwerkprogrammierung 5
TRunKX Ein Port mehrere Verbindungen? Netzwerkprogrammierung 7
G Server an mehrere Clients Netzwerkprogrammierung 15
L JavaMail: Automatisches Email Versand (mehrere Empfänger) Netzwerkprogrammierung 4
U Einen HandlerThread, der mehrere Verbindungen verwaltet? Netzwerkprogrammierung 2
X mehrere Request über eine HttpURLConnection Netzwerkprogrammierung 2
M Socket Senden an alle verbundenen Clients Netzwerkprogrammierung 3
M Socket Netzwerk Übertragung zwischen 4 Clients Netzwerkprogrammierung 2
G Gui von 2 Clients Synchronisieren Netzwerkprogrammierung 2
F Schulprojekt erweitern - Online Quiz mit mehreren Clients - Was benötige ich ? Netzwerkprogrammierung 0
P Socket Viele Clients bedienen mit Vert.x Netzwerkprogrammierung 9
M MultiClient Server - Senden an alle Clients Netzwerkprogrammierung 8
G Multiple Clients and one Server --> java.lang.NullPointerException Netzwerkprogrammierung 1
M Teilnehmerliste vom Server auch an alle Clients senden Netzwerkprogrammierung 0
Luk10 Server / Client: Clients speichern! Netzwerkprogrammierung 6
C Socket Identifikation des clients nach der accept() Methode Netzwerkprogrammierung 2
A Socket Server: Message an verschiedene Clients senden Netzwerkprogrammierung 4
B Socket Liste von clients - multicast Netzwerkprogrammierung 4
M Anzahl Clients aus Start- und Endadr. berechnen Netzwerkprogrammierung 54
R Viele Clients ein Server Netzwerkprogrammierung 8
borobudur Synchronisation von Clients Netzwerkprogrammierung 10
S Socket nach anderen clients im netzwerk suchen Netzwerkprogrammierung 3
L RMI Informationen über die Clients herausfinden Netzwerkprogrammierung 5
D Probleme bei mehreren Clients uns Senden von Messages Netzwerkprogrammierung 16
P Socket Datei von Client zum Server übertragen --> Weiterleitung an Clients Netzwerkprogrammierung 16
F Erhalten und Senden von Nachrichten anhand des Indexes des Clients Netzwerkprogrammierung 19
H Hilfe bei multiplen Clients Netzwerkprogrammierung 7
cowabunga1984 Transferierte Datenmenge eines SOAP Clients (JAX-WS) anzeigen Netzwerkprogrammierung 2
T Administration von Software auf Clients im Netzwerk Netzwerkprogrammierung 6
D Netzwerkprobleme bei mehreren Clients Netzwerkprogrammierung 4
F Peer to Peer Verbindung zwischen mehreren Clients? Netzwerkprogrammierung 8
A Server mit mehreren Clients Netzwerkprogrammierung 2
5 Webservice max. mit 5 Clients möglich Netzwerkprogrammierung 10
M clients untereinander kommunizieren Netzwerkprogrammierung 2
A RMI: Wieviele Clients können sich gleichzeitig anmelden? Netzwerkprogrammierung 34
B Rmi Kommunikation Server zu mehreren Clients? Netzwerkprogrammierung 3
T Am RMI-Server: IP des Clients ermitteln? Netzwerkprogrammierung 2
J SecurityManager - Server-Zugriff nur von bestimmten Clients? Netzwerkprogrammierung 2
T RMI - Probleme beim Starten des Clients Netzwerkprogrammierung 4
T Chat mit mehreren Clients Netzwerkprogrammierung 3
G Anzahl verbundener Clients zu einem FTP-Server ermitteln? Netzwerkprogrammierung 4
D Netzwerk Betrachtung mit vielen Clients Netzwerkprogrammierung 2
I IP Adresse des Clients einer Socket Verbindung Netzwerkprogrammierung 2
S Server mit mehreren Clients Nachrichten austauschen Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben