【发布时间】:2011-08-15 08:27:42
【问题描述】:
我正在编写一个与 C 服务器对话的 java TCP 客户端。 我必须在两者之间交替发送和接收。 这是我的代码。
- 服务器将二进制 msg(len) 的长度发送给客户端(java)
- 客户端发送“ok”字符串
- 服务器发送二进制文件,客户端分配一个 'len' 字节的字节数组来接收它。
- 它再次发回“ok”。
步骤 1. 有效。我得到“len”值。然而,客户端被“发送阻塞”并且服务器等待接收数据。
谁能看一下。
在我定义的 try 块中:
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();
}
更新:
这是我的代码。目前,双方都没有接收或发送阻塞。但是,无论是缓冲阅读器还是数据输入流阅读器,我都无法发送 ok msg。在服务器端,我得到了大量的字节而不是 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");
}
【问题讨论】:
-
“客户端发送被阻止”是什么意思?你试过调试吗?