Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java套接字客户端不';无法检测服务器消息_Java_Sockets_Inputstream_Bufferedreader_Printwriter - Fatal编程技术网

Java套接字客户端不';无法检测服务器消息

Java套接字客户端不';无法检测服务器消息,java,sockets,inputstream,bufferedreader,printwriter,Java,Sockets,Inputstream,Bufferedreader,Printwriter,我试图在远程主机上运行Java服务器套接字,该套接字将定期向所有连接的客户端广播消息(由外部进程确定) 服务器套接字定义为: ServerSocket serverSocket = (ServerSocket) ((ServerSocketFactory)ServerSocketFactory.getDefault()).createServerSocket(3050); while (true) { Socket socket = se

我试图在远程主机上运行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);
            };
        }
服务器正确打印“发送消息”字符串的次数与连接客户端的次数相同,但没有一个客户端进程打印任何内容。知道如何让客户端正确地侦听套接字inputstream吗?

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

你在读台词,但不是在写台词。但愿我每次写在这里都能得到一块钱。在发送的消息中添加一个行终止符@ControlAltDel套接字在被垃圾收集之前不会关闭,因为在收集中仍然有引用,所以不会关闭。关闭一个套接字将解除对等方中的读线()阻塞。你完全正确-从写方法切换到println以包含行终止符。现在一切都好了。