java - Java套接字客户端未检测到服务器消息

标签 java sockets inputstream bufferedreader printwriter

我试图在远程主机上运行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);
            };
        }

服务器正确地打印了“发送消息”字符串的次数与连接的客户端的次数相同,但是没有一个客户端进程可以打印任何内容。任何想法如何使客户端正确地监听套接字输入流?

最佳答案

PrintWriter.println()方法将打印给定的String并终止该行。在服务器端使用以下代码有效:

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);
    }
}

关于java - Java套接字客户端未检测到服务器消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61512556/

相关文章:

java - 使用 AWS Lambda 从 S3 上的目录创建 Tar 存档

c++ - get函数的stringstream不删除字符

java - 我是否必须在流读取的列表上进行同步?

java - 按表从 ResultSet 中删除列

Java md5,PHP 方式

c - 一个信号在阻塞模式下中断发送方法

Java:安全套接字接受

java - 使用参数从 URL 解析 InputStream

java - 缺少 Pivotal Tomcat Server Developer Edition v3.0-config

java - 获取每个连接传输的包数