Java 聊天客户端一次只打印一行
我正在编写一个多线程聊天服务器/客户端,我一直在使用SocketTest V 3测试服务器,它似乎工作正常,但我编写的客户端只在控制台中更新,当我写新行时,我正在使用我自己的客户端进行套接字测试,套接字会在每次写入内容时更新,但我的客户端不会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[]
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());
我需要它来打印每次一个客户端写的东西,我怎么能做到这一点