Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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

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 - Fatal编程技术网

Java 聊天客户端一次只打印一行

Java 聊天客户端一次只打印一行,java,sockets,Java,Sockets,我正在编写一个多线程聊天服务器/客户端,我一直在使用SocketTest V 3测试服务器,它似乎工作正常,但我编写的客户端只在控制台中更新,当我写新行时,我正在使用我自己的客户端进行套接字测试,套接字会在每次写入内容时更新,但我的客户端不会 public class clientV2 { public static final int PORT = 5019; public static InetAddress host; public static void main(String[]

我正在编写一个多线程聊天服务器/客户端,我一直在使用SocketTest V 3测试服务器,它似乎工作正常,但我编写的客户端只在控制台中更新,当我写新行时,我正在使用我自己的客户端进行套接字测试,套接字会在每次写入内容时更新,但我的客户端不会

public class clientV2 {


public static final int PORT = 5019;
public static InetAddress host;

public static void main(String[] args) throws IOException {

    try {
        host = InetAddress.getLocalHost();
        Socket socket = new Socket(host, PORT);

        Scanner in = new Scanner(System.in);

        Scanner inputFromServer = new Scanner(socket.getInputStream());

        PrintWriter outputToServer = new PrintWriter(socket.getOutputStream());

        while(true) {
            if(inputFromServer.hasNext()) {
                System.out.println(inputFromServer.nextLine());
            }

            String input = in.nextLine();
            outputToServer.println(input);
            outputToServer.flush();

        }

    } catch (Exception e) {

    }
}
}

您的客户机在其扫描仪上调用,此方法(如其名称所示)返回下一行。因此,在完整的下一行可用之前,您的客户无法打印任何内容

下面是javadoc对
nextLine()
的说明:

使扫描器前进超过当前行并返回 被跳过了。此方法返回当前行的其余部分, 不包括末端的任何行分隔符。该位置设置为 下一行的开头

由于此方法继续在输入中搜索 行分隔符,它可以缓冲搜索该行的所有输入 如果没有行分隔符,则跳过


这是因为
System.out.println(inputFromServer.nextLine())就是这样做的。它等待一整行,然后打印出来。它不会打印部分行

如果输出丢失的不仅仅是最后一部分行(换行符到换行符;换行不计数),请在过程中查找缓冲区

可以使用从输入流(即字节流)读取单个字符。可以在构造函数中指定字符集

InputStreamReader inputFromServer = 
  new InputStreamReader(socket.getInputStream(), "UTF-8");

System.out.print((char) inputFromServer.read());

我需要它来打印每次一个客户端写的东西,我怎么能做到这一点