我正在寫一個與C服務器交談的java TCP客戶端。 我必須在兩者之間交替發送和接收。 這是我的代碼。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();
}
更新:
這裏是我的代碼。目前,雙方都沒有收到或發送封鎖。但是,無論是使用Buffered Reader還是DataInput Stream閱讀器,我都無法發送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");
}
你是什麼意思'客戶端發送阻止'?你嘗試調試嗎? – hage 2011-04-29 08:47:43