客户端-服务器多线程聊天应用程序。客户与客户之间的沟通

时间:2019-04-03 23:02:09

标签: java multithreading sockets datainputstream dataoutputstream

因此,我要完成一项作业,以便在一台服务器上在一台服务器上创建2个客户端进行通信。客户端1和客户端2可以与服务器通信,但是我需要2个客户端与每个服务器通信,我很困惑?

我很确定我使用ArrayList添加客户端并使用for循环遍历它们是正确的。我只是不知道如何连接客户端之间进行通信。 这是我的代码。

// Communication Thread class在Server.class文件中。 while true循环中的for循环应使2个客户端进行通信,但不是?

class ComThreads implements Runnable{
              private Socket s;
              java.util.Date date=new java.util.Date();

              public ComThreads(Socket s)
              {
                this.s=s;
              }

              public void run()
              {     try {
                  DataInputStream inputFromClient = new DataInputStream(
                        s.getInputStream());
                    DataOutputStream outputToClient = new DataOutputStream(
                        s.getOutputStream());

                    while(true) {
                            String  line=inputFromClient.readUTF();
                    for(int i=0; i < clientList.size(); i++) {  
                        if(clientList.get(i).equals(s)) {
                    Socket tempSoc=clientList.get(i);
                    DataOutputStream msOut=new DataOutputStream(tempSoc.getOutputStream());
                    msOut.writeUTF(line);
                    //outputToClient.writeUTF(message);
                    msOut.flush();
                        }

                    }
                    Platform.runLater(()->{
                        ta.appendText(line);
                        ta.appendText("\n");
                    });


                    }

                } catch (IOException e) {
                  e.printStackTrace();
                }finally {
                    try {
                        s.close();
                    }catch(IOException e) {
                        // later
                    }

                }

              }

            }           

        }   

只需要2个客户端进行通信。任何帮助,将不胜感激。 谢谢

1 个答案:

答案 0 :(得分:0)

我知道了。我要做的就是添加一个Runnable类,该类读取Client消息并将其传达给其他客户端。所以我只是在Client类中缺少一个线程。 谢谢。