【发布时间】:2014-09-10 19:15:50
【问题描述】:
当我直接使用Socket.getInputStream() 接收数据时(没有像 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();
}
}
}
【问题讨论】:
-
听起来远程端没有发送面向线路的数据。
-
@ElliottFrisch 哇,谢谢。我认为在收到来自控制台的输入后我不必添加
\n
标签: java sockets inputstream java.util.scanner