Hi,
ich habe eine Frage bezüglich der Socketprogrammierung in Java.
Vielleicht kurz meine Klassen (Ausschnitt):
TCPServer.java
Wenn sich ein Client anmeldet befindet er sich in "Wartestellung" wenn der Server dann ein Ereignis feststellt z.B. ich drücke auf der ServerGui auf einen Button dann wird ein Thread erstellt...
TCPThread.java
Und die Daten (in meinem Fall eine SQLID) werden an den Client gesendet
Das funktioniert auch ganz prima! (Mit einem Client)
Hier vielleicht noch meine TCPClient.java KLasse die Daten empfangen soll:
Jetzt zu meiner Frage und zwar soll sich nicht nur ein Client anmelden sondern vielleicht noch ein zweiter oder dritter. Das Problem ist das (das ist meine Vermutung) der socket mit der zweiten Anmeldung überschrieben wird und daher nur der Client bedient wird der sich als zweites angemeldet hat. Zur Info ich bin noch ein Java Anfänger :rtfm:
Jemand eine Idde wie dieses Prob. zu lösen ist?? Hatte schon dran gedacht jede neue Clientanmeldung in ein Array bzw. was dynamisches z.B. eine ArrayList zu schreiben. Wie ich mit ArrayListen umgehe weis ich aber ich hab keinen schimmer wie ich das mit einem Socket umsetzten soll.
Vielen Dank,
Goodcat
ich habe eine Frage bezüglich der Socketprogrammierung in Java.
Vielleicht kurz meine Klassen (Ausschnitt):
TCPServer.java
Java:
public void run() {
try {
//Erzeugen des Socket
ServerSocket socket = new ServerSocket (SERVER_PORT);
print("Warten auf Verbindungen ...");
while(true) {
this.client = socket.accept();
print( "Clientanmeldung: IP-Adresse: " + client.getInetAddress().getHostAddress() + " Port: " + client.getPort());
//Thread erzeugen, der Kommunikation
//mit Client übernimmt
}
}
catch(BindException e1) {
print("Address already in use.");
}
catch(Exception e) {
e.printStackTrace();
}
}
Wenn sich ein Client anmeldet befindet er sich in "Wartestellung" wenn der Server dann ein Ereignis feststellt z.B. ich drücke auf der ServerGui auf einen Button dann wird ein Thread erstellt...
TCPThread.java
Java:
public void run() {
try {
OutputStream output = client.getOutputStream();
byte[] antwort = ( sqlID.getBytes() );
output.write (antwort);
// Verbindung beenden
// client.close();
// print ( ":\tClient erfolgreich bedient ...");
}
catch (Exception e) {
// Wenn ein Fehler auftritt ...
e.printStackTrace();
}
}
Und die Daten (in meinem Fall eine SQLID) werden an den Client gesendet
Das funktioniert auch ganz prima! (Mit einem Client)
Hier vielleicht noch meine TCPClient.java KLasse die Daten empfangen soll:
Java:
public void run() {
if ( this.connect == 1 ) {
try {
// Erzeugen des Socket und Aufbau der Verbindung
this.socket = new Socket ( server_hostname, server_port );
this.socket.setKeepAlive(true);
notifyListenerStaus( new DataEvent( this, "Verbindung mit " + this.socket.getRemoteSocketAddress() + " hergestellt") );
notifyListenerConnection(1);
InputStream stream = this.socket.getInputStream();
StringBuilder readCharacter;
while(true) {
readCharacter = new StringBuilder();
readCharacter.append((char)stream.read());
notifyListener( new DataEvent( this, readCharacter.toString() ) );
}
}
catch (UnknownHostException e) {
// Wenn Rechnername nicht bekannt ist ...
System.out.println ("Rechnername unbekannt:\n" + e.getMessage());
}
catch (java.net.ConnectException e) {
notifyListenerStaus( new DataEvent( this, "Verbindung zu " + server_hostname + ":" + server_port + " konnte nicht aufgebaut werden!" ) );
notifyListenerConnection(0);
}
catch (Exception e) {
// Wenn die Kommunikation fehlschlägt
System.out.println ("Fehler während der Kommunikation:\n" +
e.getMessage());
e.printStackTrace();
}
finally {
// Beenden der Kommunikationsverbindung
closeConnection();
}
}
else {
notifyListenerStaus( new DataEvent( this, "Verbindung zum Server wird nicht aufgebaut..." ) );
notifyListenerConnection(0);
}
}
Jetzt zu meiner Frage und zwar soll sich nicht nur ein Client anmelden sondern vielleicht noch ein zweiter oder dritter. Das Problem ist das (das ist meine Vermutung) der socket mit der zweiten Anmeldung überschrieben wird und daher nur der Client bedient wird der sich als zweites angemeldet hat. Zur Info ich bin noch ein Java Anfänger :rtfm:
Jemand eine Idde wie dieses Prob. zu lösen ist?? Hatte schon dran gedacht jede neue Clientanmeldung in ein Array bzw. was dynamisches z.B. eine ArrayList zu schreiben. Wie ich mit ArrayListen umgehe weis ich aber ich hab keinen schimmer wie ich das mit einem Socket umsetzten soll.
Vielen Dank,
Goodcat