服务器中介的客户端到客户端

时间:2018-08-19 07:48:32

标签: java multithreading socket.io client-server

我正在尝试通过服务器实现客户端到客户端。 Client1将一条线发送到服务器,服务器将其转发到所有其他客户端。 你能指出我的错误吗?其他客户端上没有任何内容。

服务器代码:

public class Server {
    int port;
    ServerSocket server=null;
    Socket socket=null;
    ExecutorService exec = null;
    ArrayList clients = new ArrayList();
    DataOutputStream dos=null;

    public static void main(String[] args) throws IOException {
        Server serverobj=new Server(2000);
        serverobj.startServer();
    }

    Server(int port){
        this.port=port;
        exec = Executors.newFixedThreadPool(3);
    }

    public void startServer() throws IOException {

        server=new ServerSocket(2000);
        System.out.println("Server running");

        while(true){

            socket=server.accept();
            dos = new DataOutputStream(socket.getOutputStream());
            clients.add(dos);
            ServerThread runnable= new ServerThread(socket,new ArrayList<>(clients),this);
            exec.execute(runnable);
        }

    }

    private static class ServerThread implements Runnable {

        Server server=null;
        Socket socket=null;
        BufferedReader brin;
        Iterator it=null;
        Scanner sc=new Scanner(System.in);
        String str;

        ServerThread(Socket socket, ArrayList clients ,Server server ) throws IOException {

            this.socket=socket;
            this.server=server;
            System.out.println("Connection successful with "+socket);

            brin=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            it = clients.iterator();

        }

        @Override
        public void run() {

            try{
                while ((str = brin.readLine()) != null) { 
                while (it.hasNext()) {
                    try{

                    DataOutputStream dost=(DataOutputStream) it.next();
                    dost.writeChars(str);
                    dost.flush();

                    }
                    catch(IOException ex){
                        System.out.println("Error 1 "+ex);
                    }
            }
        }

                brin.close();
                socket.close();             

         } 
         catch(IOException ex){
             System.out.println("Error 2 "+ex);
         }            

        }
    }

}

客户端1代码:

public class Client1 {
    public static void main(String args[]) throws IOException{

        String str;
        Socket socket=new Socket("127.0.0.1",2000);

        PrintStream prout=new PrintStream(socket.getOutputStream());
        BufferedReader bread=new BufferedReader(new InputStreamReader(System.in));
        BufferedReader dis=new BufferedReader(new InputStreamReader(socket.getInputStream()));

        while(true){
        System.out.println("Send to others:");
            str=bread.readLine();
            prout.println(str);

        }
    }

}

其他客户:

public class Client2 {
    public static void main(String args[]) throws IOException{

        String str;
        Socket socket=new Socket("127.0.0.1",2000);

        BufferedReader dis=new BufferedReader(new InputStreamReader(socket.getInputStream()));

        while(true){                 
        str=dis.readLine();
        System.out.print("Message: "+str+"\n");

        }      
    }

}

请帮助。.我已经待了两天了...

0 个答案:

没有答案
相关问题