C 서버와 통신하는 java TCP 클라이언트를 작성 중입니다. 둘 사이에서 송수신을 교대로해야합니다. 내 코드는 다음과 같습니다.Java TCP 클라이언트 전송이 차단 되었습니까?
- 서버는 클라이언트에게 이진 MSG (LEN)의 길이를 송신한다 (자바)
- 클라이언트
- 서버 바이너리 전송하고 클라이언트는 '길이 (len)의 바이트 배열을 할당하는 "OK"문자열을 보낸다 바이트를받습니다.
- 다시 "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();
}
업데이트 :
것은 여기 내 코드입니다. 현재, 어느 쪽에서도 recv 또는 send 차단이 없습니다. 그러나 Buffered Reader와 DataInput Stream reader 모두에서 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