私はクライアント/サーバーJavaアプリケーションを構築しています。問題は、writeInt()でIntegerを送信すると、readInt()でブロックされることがあることです。ソケットreadIntは常に動作しない
クライアント
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();
サーバー
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;
}
}
ユーザスレッド
@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);
...
私がサーバーに送信された最初の文字列に基づいてクライアントを区別しようとしています。ときどき、サーバーがintを読み込み、時にはそれをブロックします。 出力の例です:
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...
これで動作します。ありがとう! –