Avatar billede quiw Nybegynder
11. august 2009 - 14:32 Der er 3 kommentarer og
1 løsning

Problemer med klienterne, på multithreaded server.

Kære eksperter.
Jeg kan simpelthen ikke gennemskue, hvorfor det ikke virker efter hensigten.

- Den compiler fint, kører fint, men når 2 klienter logger på, på samme tid, så vil den kun modtage/give respons til 1 af klienterne (den første), og hvis alle klienterne logger af, modtager den pludselig hele skidtet fra alle sammen, med det samme. Det er som om, at det hele står i kø, indtil de logger af.

Har følgende 3 filer:

//////////// main.java

package main;

public class main {
    public static void main(String[] args) {
      network net = new network();
      net.startnet(8888, 6000000);
    }
}


//////////// network.java


package main;

import java.net.*;
import java.io.*;
import java.util.*;


public class network {

    public network() {
    }

    public void startnet(int port, int timeout) {
          List list = new ArrayList();

          ServerSocket server = null;
          Socket socket = null;

          //Trying to listen at port
          try{
              System.out.println("[server]  : starting network.");
              server = new ServerSocket(port);
          }catch(BindException e){
              System.out.println("    * Could not listen at: "+port+".");
              e.printStackTrace();
          }catch(IOException e){
              System.out.println("    * Could not open server-socket.");
              e.printStackTrace();
          }finally{
              System.out.println("    * Listening at port: "+port+".");
              System.out.println("    * ServerSocket made: "+server+".");
              System.out.println("    * server started ...");
          }
          //Trying to accept clients
          while(true){
              try{
                  socket = server.accept();
                  socket.setSoTimeout(600000);

                  //Start new thread
                  client client = new client(socket, list);
                  client.start();

              }catch(IOException e){
                  System.out.println("[server]  : Could not accept socket.");
                  e.printStackTrace();
              }
          }
    }
}



/////////////// client.java

package main;

import java.net.*;
import java.io.*;
import java.util.*;

public class client extends Thread {
    private BufferedReader read;
    private PrintWriter write;
    private List list;
    private Socket sd;

    public client(Socket socket, List list){

        try{
            this.sd = socket;
            this.list = list;
            read = new BufferedReader(new InputStreamReader(sd.getInputStream()));
            write = new PrintWriter(sd.getOutputStream(), true);
        }catch(IOException e){
            e.printStackTrace();
        }
        connected();
    }

    public void run() {
        connected();
    }

    public void connected(){
        String buffer = "empty";
        list.add(this);
        while(buffer!=null){
            buffer = recv();
            System.out.println("Echo: "+buffer);
            send("Echo: "+buffer);
        }
        destroy();
    }

    public void destroy() {
        try{
            read.close();
            write.close();
            sd.close();
        }catch (NumberFormatException e){
            e.printStackTrace();
        }catch (UnknownHostException e){
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }finally{
            System.out.println("disconnected.");
            list.remove(this);
            this.stop();
        }
    }

    public String send(String msg){
        write.println(msg);
        write.flush();
        return "#Write succesfully";
    }

    public String recv(){
        String buffer = null;
        try{
            buffer=read.readLine();
        }catch(IOException e){
            return buffer;
        }finally{
            return buffer;
        }
    }
}
Avatar billede quiw Nybegynder
11. august 2009 - 14:34 #1
Eventuelt forslag til optimering, forbedringer eller andet er også velkomne :)
Avatar billede odsgaard Praktikant
11. august 2009 - 16:17 #2
Hej

Prøv at kigge på dette link - det viser hvordan du kan lave et simpelt client-server chat program

http://pirate.shu.edu/~wachsmut/Teaching/CSAS2214/Virtual/Lectures/chat-client-server.html

Hilsen
Brian
Avatar billede quiw Nybegynder
11. august 2009 - 21:11 #3
Well, jeg løste mit problem selv, jeg havde glemt at tilføje
en funktion:
public void run(){
}

Og starte derfra. Men jeg takker alligevel for din indsats, du fortjener et par point for det. Smid svar :)
Avatar billede odsgaard Praktikant
12. august 2009 - 16:06 #4
Værsgo' :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester