Ich benutze ServerSocket, um Daten vom Client in einer while-Schleife zu erhalten, es funktioniert bei der ersten Ausführung, schlägt aber nach der zweiten Runde fehl.ServerSocket empfängt keine Daten in einer Schleife
Ich habe einige Suche, aber immer noch nicht herausfinden, was passiert ist.
Server-Side-Code
package com.gorilla.main;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server2 {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(44444);
while(true){
System.out.println("another round");
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
System.out.println("available: "+ inputStream.available());
byte[] b = new byte[inputStream.available()];
inputStream.read(b);
System.out.println(new String(b));
System.out.println("=======================");
socket.close();
}
}
}
Clent Seitencode
package com.gorilla.main;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client2 {
public static void main(String [] args) throws Exception{
Socket socket = new Socket("127.0.0.1", 44444);
String s = "Hello World";
byte [] b = s.getBytes();
socket.getOutputStream().write(b);;
socket.close();
}
}
und der Ausgang an Server Seitenkonsole, nachdem ich Client-3-mal lief.
another round
available: 11
Hello World
=======================
another round
available: 0
=======================
another round
available: 0
=======================
another round
Jeder Vorschlag wäre willkommen. Vielen Dank.
Es funktioniert. Aber warum kann ich etwas aus einem inputStream lesen, wenn inputStream.available() 0 ist? Hast du Ideen? –
Und danke für deine Antwort !! –
Ihr Anwendungsfall erfordert nicht 'available()'. Lies einfach (es ist ein blockierender Anruf) und konfiguriere das Timeout – Raffaele