Socket ServerSocket starten über GUIIm unterstehenden Code versuche

cezary

Mitglied
Im unterstehendem Code versuche ich aus einem GUI die Portnummer für einen Server zu übermitteln. Aus dem GUI wird sie über den Controller an die Klasse ServerSOCKET übergeben und dort in der run()-Methode weiter an den ServerSocket geleitet. Bis dahin funktioniert es; eine Kontrollausgabe zeigt an, dass die Portnummer an den ServerSocket übergeben wurde. Doch die Methode accept() funktioniert nicht, d.h. sie wird nicht aufgerufen.

Bedanke mich im Voraus für konstruktive Tips 🙂

Java:
import java.io.*;
import java.awt.*;
import java.net.*;
import java.lang.*;
import java.util.*;
import javax.swing.*;
import java.net.Socket;
import java.awt.event.*;
import java.net.ServerSocket;

public class ServerSOCKET2 {
    private Socket socket;   
    private ServerGUI2 serverGUI2;
    
    private int port = 0;
        
    public ServerSOCKET2(ServerGUI2 serverGUI2_, int port_) 
    {                                                             
        this.port = port_ ;
        this.serverGUI2 = serverGUI2_;
        }

        public void los()
        {
            Thread t = new Thread(new INNENServerSOCKET2());
            t.start();
        }
        public class INNENServerSOCKET2 extends Thread{
             public void run()
             {
             try{
                 serverGUI2.ta3.setText("bin am laufen, \nDeine run()-Methode  "+port);   
                 ServerSocket serverSock = new ServerSocket(port);//Initialisierung derKommunikationsverbindung
                    while(true){
                     serverGUI2.ta4.setText("zweite Kontrolle Port " + port);
                     Socket socket = serverSock.accept();
                     serverGUI2.ta4.setText("dritte Kontrolle Port " + port);
                     System.out.println("warte auf Anforderung");
                }}catch(IOException ioe){}            
            }
        }
}
 
Die Methode accept() blockiert ebenso wie bei streams das read(), bis, in diesem Fall, ein Client sich auf diesem Port verbindet. Erst dannach wird code, der sich hinter dem accept () befindet ausgeführt.
 
erstens: weil der schwarz/weiße Balken der JVM (bei BlueJ) nicht rotierend rot/weiß wird
zweitens: die Kontrollausgabe "Warte auf Verbindung" hinter dem Aufruf von accept() nicht erscheint

Java Doc der Methode noch nicht gelesen gelesen, weil nicht auf Idee gekommen 😳
(erstmal wissen, wie man sie findet ;-))
 
wie kann die Methode accept() etwas blockieren, wenn sie erst gar nicht aufgerufen werden konnte - der Server läuft doch erst dann in "Wartestellung", wenn diese Methode aufgerufen wird. Die Portnummer wird (bei mir) dem ServerSocket aus dem GUI übergeben, was die Kontrollausgabe bestätigt, aber trotzdem wird accept() nicht aktiv. Kann es vielleicht sein, daß dieser Aufruf ausschließlich in der main() Methode erfolgen muß und nicht nur in einer eigenen Klasse ?
 
Das die sachen nicht erscheinen könnte auch daran liegen, dass du Objekte manipulierst, die eigentlich durch den EDT verarbeitet werden.

Wie dem auch sei: Alles, was hinter accept() liegt wird nicht aufgerufen, bis ein Client sich verbindet.

Ich weiß nicht, wie das mit BlueJ ist, was passiert, wenn du die Sachen mit System.out ausgibstß
 

Zurück
Oben