2011-11-14 2 views
0

소켓에서 수신 대기중인 자바 서버가 있습니다. 이 java 서버 소켓과 연결된 java 클라이언트 소켓간에 데이터를 보내고받을 수 있습니다.PHP에서 Java 소켓으로 바이트 배열 보내기

지금 자바 소켓을 통해 PHP를 자바 서버에 연결하고 싶지만 자바에 바이트 배열 (pack() 사용)을 보낼 수 없습니다. 내가 in.readInt()를 호출 할 때 자바 말에

$socket = fsockopen("127.0.0.1", 5477) or die("Error creating socket"); 

$output = pack("i3", 2, 1, 1); 
fwrite($socket, $output, 3); 

가 나는 java.io.EOFException을 얻을 그래서 문제가 무엇

if (in.available() != 0) 
{ 
    //read the data 
    int len = in.readInt(); //length of the buffer 
} 

(inDataInputStream 어디입니까)?/올바른 방법으로이 작업을 수행하고 있습니까? 아니면이 작업을 수행하는 더 좋은 방법이 있습니까?

답변

1
당신은 소켓에 불과 3 바이트를 작성하는

하지만 readInt()는 항상 자바에게 int 값을 구성하는 4 바이트를 읽습니다.

자연스럽게 3 바이트 뒤에 EOFException이 생깁니다.

+0

오 예. 그래서 나는 그것을 다음과 같이 변경해야한다 :'fwrite ($ socket, $ output, 12)'? 그리고 자바에서 비트 순서를 뒤집을 필요가 있습니까? (내가 지금 길이를 읽을 때 나는 33554432를 얻는다.) – Andrew

+1

@Andrew. Java DataInputStream은 빅 엔디안 바이트 순서를 사용하므로이를 사용하려면 PHP 측에서 적절하게 데이터를 패키지화해야합니다. –

관련 문제