【问题标题】:Java sockets - How to send a message from client c1 to server s, and then from s to client c2Java套接字-如何将消息从客户端c1发送到服务器s,然后从s发送到客户端c2
【发布时间】:2018-05-15 18:24:23
【问题描述】:

我有这种情况:

2 个客户端:c1,c2

1 个服务器:s

我需要从 c1 向 s 发送一条消息 m,然后我需要 s 向 c2 发送一条通知消息。 我正在使用 Java 套接字。 我的代码很简单,可以从 c1 向 s 发送消息:

服务器

try {
    ServerSocket listener = new ServerSocket(9090);
    System.out.println("Server ready to accept connections");
        while (true) {
            Socket socket = listener.accept();
            try {
                BufferedReader in =
                        new BufferedReader(
                                new InputStreamReader(socket.getInputStream()));
                Scanner x = new Scanner(in);
                System.out.println("Client has sent :");
                while (x.hasNextLine()){
                    System.out.println(x.nextLine());
                }
                PrintWriter out =
                        new PrintWriter(socket.getOutputStream(), true);
                out.println("OK");
                out.flush();
            } catch (Exception ex) {
                System.out.println(ex.getLocalizedMessage());
            }
                finally
            {
                socket.close();
            }
        }
    }catch (Exception ex){
        System.out.println(ex.getLocalizedMessage());
    }

客户

Socket s = null;
    try {
        s = new Socket("localhost", 9090);
    } catch (IOException e) {
        System.out.println(e.getLocalizedMessage());
    }
    try {
        PrintWriter out =
                new PrintWriter(s.getOutputStream(), true);
        out.println("Random Text");
        out.flush();
        s.shutdownOutput();
        //out.close();
    } catch (IOException e) {
        System.out.println(e.getLocalizedMessage());
    }
    BufferedReader input = null;
    try {
        input = new BufferedReader(new InputStreamReader(s.getInputStream()));
    } catch (IOException e) {
        System.out.println(e.getLocalizedMessage());
    }
    Scanner y = new Scanner(input);
    String answer = "";
    while (y.hasNextLine()) {
        answer = answer.concat(y.nextLine());
    }
    System.out.println("Answer :");
    System.out.println(answer);
    System.out.println(answer);

现在,我如何编辑我的代码来按照我说的做? 非常感谢!

【问题讨论】:

    标签: java sockets server notifications client


    【解决方案1】:

    由于您尝试在客户端之间进行通信,因此您必须使用线程来执行此操作。所以它的工作原理是你必须捕获两个客户端并将它们放在同一个线程中。

    public static void startServer() {
        ExecutorService executorService = Executors.newFixedThreadPool(2);
        ServerSocket server = new ServerSocket(9090);
        executorService.execute(() -> {
           Socket client1 = server.accept();
           Socket client2 = server.accept();
           executorService.execute(new ServerConnection(client1, client2));
        });
    }
    

    ServerConnection 类将采用两个客户端(Socket),您可以使用它们在客户端到服务器到客户端之间进行通信。将 ServerConnection 视为来自客户端的数据,服务器将做出相应的反应。

    【讨论】:

      猜你喜欢
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 2021-05-28
      相关资源
      最近更新 更多