Scanner.nextLine () blockiert bei Verwendung von InputStream from Socket
Wenn ich Daten mit empfangeSocket.getInputStream()
Direkt (ohne irgendeine Schnittstelle wie Scanner) blockiert es nicht. Aber wenn ich versuche, einen Scanner zu verwenden (ähnlich wie wir Strings von erhalten)System.in
), es tut. Ich habe mich gefragt, warum dies so ist und inwiefern sich der InputStream, den ein angeschlossener Socket an Sie liefert, von dem unterscheidetInputStream in
imSystem
.
Der zum Testen verwendete Client (für beide Server verwendet)
Der Code, der hängt:
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();
}
}
}
Der Code, der nicht blockiert:
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();
}
}
}