简体   繁体   English

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

[英]Java socket client doesn't detect server messages

I am attempting to run a Java server socket on a remote host which will regularly broadcast messages (determined by external processes) to all connected clients.我正在尝试在远程主机上运行 Java 服务器套接字,它将定期向所有连接的客户端广播消息(由外部进程确定)。

The server socket is defined as:服务器套接字定义为:

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

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

Which will keep track of the socket connections in an array list.它将跟踪数组列表中的套接字连接。 The method below will then be called whenever a broadcast needs to be sent:每当需要发送广播时,将调用以下方法:

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

On the client side, the setup is as below:在客户端,设置如下:

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

The server is correctly printing the "Sending message" string as many times as there are clients connected, but none of the client processes print anything.服务器正确打印“发送消息”字符串的次数与连接的客户端一样多,但没有任何客户端进程打印任何内容。 Any idea how to get the clients to properly listen to the socket inputstream?知道如何让客户端正确监听套接字输入流吗?

PrintWrite.println() method will print the String it's given and terminate the line. PrintWrite.println() 方法将打印它给出的字符串并终止该行。 Using the below on the server side worked:在服务器端使用以下内容有效:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM