当我直接使用
用于测试的客户端(用于两个服务器)
导致阻塞的代码:
Socket.getInputStream()
(不使用类似Scanner这样的接口)接收数据时,它不会阻塞。但是,当我尝试使用Scanner(类似于从System.in
接收字符串的方式)时,它会被阻塞。我想知道这个原因,以及连接的Socket提供给您的InputStream与System
中的InputStream in
有何不同。用于测试的客户端(用于两个服务器)
导致阻塞的代码:
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(15180);
Socket socket = ss.accept();
Scanner scanner = new Scanner(socket.getInputStream());
//read data from client
while(true) {
String data = scanner.nextLine();
System.out.println("Received data!");
}
}catch(IOException e) {
e.printStackTrace();
}
}
}
不阻塞的代码:
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(15180);
Socket socket = ss.accept();
//read data from client
while(true) {
int data = socket.getInputStream().read();
System.out.println("Received data!");
}
}catch(IOException e) {
e.printStackTrace();
}
}
}
\n
。 - Dioxin