Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

ServerSocket - java

Anoniem
None
6 antwoorden
  • Hallo

    In mijn programma wacht ik mbv een serversocket (methode accept()), op een verbinding. Maar door deze methode te gebruiken kan ik verder niets anders doen met het programma dan wachten op een verbinding
    De server stoppen door middel van een stop knop lukt dus niet meer, desondank ik de server in een aparte thread heb lopen. Met een client kan ik wel gewoon verbinding maken met de server.

    Hoe moet ik dit oplossen?
  • Post je code eens.
  • Dit is dan het stukje waar gewacht wordt op een verbinding, zelf zit het in een aparte thread.

    [code:1:324dd4acac]class MyServer extends Thread {
    private ServerSocket ss;
    public MyServer(int socketnumber) throws Exception{

    ss = new ServerSocket(socketnumber);
    }

    public void run(){
    while(true){
    try{
    Socket incoming = ss.accept();
    new MyServerHandler(incoming);
    }
    catch(IOException ioex){}
    }
    }

    }[/code:1:324dd4acac]
  • Kun je even de aanroepende code geven ?
  • Dit is dus waar de thread aangeroepen wordt. Terwijl ik de code hier plaatst zag ik dat de thread nog gestart werd dmv run(), omdat ik eerst Runnable implementeerde in de server-klasse. Dit heb ik later vervangen door Thread, maar run() is hier blijven staan. Nu heb ik run dus vervangen door start() en is het probleem opgelost. Wel vreemd eigenlijk, of toch niet?.

    Toch nog bedankt

    [code:1:e4dded3648]

    class Netprogram extends JFrame implements ActionListener {
    private MyServer serv;

    public Netprogram() {
    //getContentPane().add(buildView(),"Center");
    //getContentPane().add(buildControl(),"South");

    try{
    serv = new MyServer(1200);
    }
    catch(Exception ex){}


    }



    public void actionPerformed(ActionEvent e){
    String cmd = e.getActionCommand();

    if(cmd.equals("start")){
    //start server thread
    serv.run();


    }
    if(cmd.equals("stop")){
    //stop server thread.
    serv.suspend();

    }


    }


    [/code:1:e4dded3648]
  • [quote:3fff81aa12="Deathlon"]Dit is dus waar de thread aangeroepen wordt. Terwijl ik de code hier plaatst zag ik dat de thread nog gestart werd dmv run(), omdat ik eerst Runnable implementeerde in de server-klasse. Dit heb ik later vervangen door Thread, maar run() is hier blijven staan. Nu heb ik run dus vervangen door start() en is het probleem opgelost. Wel vreemd eigenlijk, of toch niet?.
    Toch nog bedankt
    [/quote:3fff81aa12]

    Dit is niet vreemd, de Run() method is gewoon een method die sequentieel wordt uitgevoerd. Je moet een Thread expliciet starten met Start(), dan wordt Run() parallel uitgevoerd aan ander code. Zie
    http://java.sun.com/j2se/1.4/docs/api/java/lang/Thread.html

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.