【问题标题】:Java socket client doesn't detect server messagesJava 套接字客户端不检测服务器消息
【发布时间】:2023-04-01 09:57:01
【问题描述】:

我正在尝试在远程主机上运行 Java 服务器套接字,它将定期向所有连接的客户端广播消息(由外部进程确定)。

服务器套接字定义为:

        ServerSocket serverSocket = (ServerSocket) ((ServerSocketFactory)ServerSocketFactory.getDefault()).createServerSocket(3050);

        while (true) {
            Socket socket = serverSocket.accept();
            remoteService.addSocket(socket);
        }

它将跟踪数组列表中的套接字连接。每当需要发送广播时,都会调用以下方法:

public void broadcastMessage(String message){
    for (Socket socket : remoteService.getSockets()) {
        System.out.println("Sending message: " + message);
        PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
        printWriter.write(message);
    }
}

在客户端,设置如下:

        Socket socket =  (Socket) ((SocketFactory) SocketFactory.getDefault()).createSocket(serverHost,portNum);

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

        while (true) {
            String message = socketBufferedReader.readLine();
            if (message != null && message != "") {
                System.out.println("Message received: " + message);
            };
        }

服务器正确打印“发送消息”字符串的次数与连接的客户端一样多,但没有任何客户端进程打印任何内容。知道如何让客户端正确监听套接字输入流吗?

【问题讨论】:

  • 你在读行但你没有写行。希望我每次在这里写的时候都能赚到钱。在发送的消息中添加行终止符,
  • @ControlAltDel 在 it 被垃圾回收之前,套接字不会关闭,因为集合中仍然存在引用,所以不会关闭。并且关闭一个套接字会解除对端中的readLine() 的阻塞。
  • 你是绝对正确的 - 从 write 方法切换到 println 以包含行终止符就可以了。现在一切正常。

标签: java sockets inputstream bufferedreader printwriter


【解决方案1】:

PrintWrite.println() 方法将打印它给出的字符串并终止该行。在服务器端使用以下内容:

public void broadcastMessage(String message){
    for (Socket socket : remoteService.getSockets()) {
        System.out.println("Sending message: " + message);
        PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
        printWriter.println(message);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 2016-08-31
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多