私はCサーバと通信するjava TCPクライアントを作成しています。 私は両者の間で送受信を交互にする必要があります。 ここに私のコードです。Java TCPクライアント送信がブロックされましたか?
- サーバはクライアントにバイナリMSG(LEN)の長さを送信する(Java)の
- クライアントが
- Serverは、バイナリを送信し、クライアントが「lenの」のバイト配列を割り当て、「OK」の文字列を送信しますそれを受け取るためのバイト。
- もう一度 "ok"を返します。
ステップ1.動作します。私は "len"値を取得します。しかし、クライアントは「送信ブロック」を取得し、サーバーはデータの受信を待機します。
誰でも見ることができます。
Socket echoSocket = new Socket("192.168.178.20",2400);
OutputStream os = echoSocket.getOutputStream();
InputStream ins = echoSocket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(ins));
String fromPU = null;
if((fromPU = br.readLine()) != null){
System.out.println("Pu returns as="+fromPU);
len = Integer.parseInt(fromPU.trim());
System.out.println("value of len from PU="+len);
byte[] str = "Ok\n".getBytes();
os.write(str, 0, str.length);
os.flush();
byte[] buffer = new byte[len];
int bytes;
StringBuilder curMsg = new StringBuilder();
bytes =ins.read(buffer);
System.out.println("bytes="+bytes);
curMsg.append(new String(buffer, 0, bytes));
System.out.println("ciphertext="+curMsg);
os.write(str, 0, str.length);
os.flush();
}
更新:ここで
が私のコードで私が定義したtryブロックで
。現時点では、どちらの側にもrecvやsendブロッキングはありません。ただし、Buffered ReaderとDataInput Streamリーダーの両方で、ok msgを送信できません。サーバー側では、okの2バイトの代わりに多数のバイトを取得します。
Socket echoSocket = new Socket("192.168.178.20",2400);
OutputStream os = echoSocket.getOutputStream();
InputStream ins = echoSocket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(ins));
DataInputStream dis = new DataInputStream(ins);
DataOutputStream dos = new DataOutputStream(os);
if((fromPU = dis.readLine()) != null){
//if((fromPU = br.readLine()) != null){
System.out.println("PU Server returns length as="+fromPU);
len = Integer.parseInt(fromPU.trim());
byte[] str = "Ok".getBytes();
System.out.println("str.length="+str.length);
dos.writeInt(str.length);
if (str.length > 0) {
dos.write(str, 0, str.length);
System.out.println("sent ok");
}
byte[] buffer = new byte[len];
int bytes;
StringBuilder curMsg = new StringBuilder();
bytes =ins.read(buffer);
System.out.println("bytes="+bytes);
curMsg.append(new String(buffer, 0, bytes));
System.out.println("binarytext="+curMsg);
dos.writeInt(str.length);
if (str.length > 0) {
dos.write(str, 0, str.length);
System.out.println("sent ok");
}
「クライアントが送信をブロックする」とはどういう意味ですか?デバッグしようとしましたか? – hage