Ich baue eine Client-Server-Java-Anwendung. Das Problem ist, dass, wenn ich Integer mit writeInt() sende, es manchmal auf readInt() blockiert.Sockets readInt funktioniert nicht immer
Kunde
PrintWriter socketOut = new PrintWriter(sock.getOutputStream());
DataOutputStream d = new DataOutputStream(sock.getOutputStream());
String s = "User";
socketOut.println(s);
socketOut.flush();
d.writeInt(data[0]);
d.flush();
d.writeInt(data[1]);
d.flush();
Server
while(true){
System.out.println("Listening for clients...");
clientSock = serverSock.accept();
Scanner in = new Scanner(clientSock.getInputStream());
String clientType = in.nextLine();
switch(clientType){
case "Resource":
new Thread(new ResourceService(clientSock)).start();
break;
case "User":
new Thread(new UserService(clientSock)).start();
break;
}
}
Benutzer-Thread
@Override
public void run(){
try{
DataInputStream input = new DataInputStream(user.getInputStream());
int i = 0;
int a = input.readInt(); // Sometimes it blocks here.
int b = input.readInt();
System.out.println(a);
System.out.println(b);
...
ich zwischen Kunden auf der ersten Zeichenfolge an den Server gesendet Basis zu unterscheiden bin versucht. Manchmal liest der Server den Int und manchmal blockiert er. Ein Beispiel für Ausgabe lautet:
Listening for clients...
Listening for clients...
Listening for clients...
Listening for clients...
Listening for clients...
1 // here the server didn't block
100000
Listening for clients...
Es funktioniert jetzt. Vielen Dank! –