2012-05-19 3 views
0

Java로 작성된 서버가 있습니다. 클라이언트가 연결될 때 "HELLO"를 울리는 단순한 것입니다. 그런 다음 클라이언트가 보내는 모든 답장을 되풀이합니다. PHP 클라이언트를 사용하여 Java 소켓 서버에서 응답을 읽을 수 없습니다.

ServerSocket ss=new ServerSocket(2001); 
while(true) { 
    Socket s=ss.accept(); 
    BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream())); 
    PrintWriter out=new PrintWriter(s.getOutputStream(),true); 
    out.println("HELLO"); 
    String msg=in.readLine(); 
    out.println(msg); 
} 

내가 서버에 연결하는 PHP 스크립트가 : 코드는 다음과 같습니다

<?php 
    $socket=socket_create(AF_INET,SOCK_STREAM,getprotobyname('tcp')); 
    socket_connect($socket,'127.0.0.1',2001); 
    $msg=socket_read($socket,10); 
    echo socket_write($socket,'I am the client.'); 
    $msg=socket_read($socket,20); 
    echo $msg; 
?> 

내가 서버에서 "HELLO"메시지가 무엇입니까를, 서버는 또한 "는 점점 나는 클라이언트 "메시지이지만 PHP 클라이언트가 응답을 다시받지 못합니다. 여기서 내가 뭘 잘못하고 있니?

답변

4

in.readLine()은 줄 종결자를 찾을 때까지 반환되지 않습니다.

PHP의 socket_write에 암묵적으로 라인 종결자가 추가되지 않으면 자바 측에서 전체 텍스트 줄을 작성했음을 알 수 있도록 직접 작성해야합니다.

+0

확인. 따라서 회신 후 개행 문자를 추가해야합니다! –

+0

서버가 php에서 메시지를 얻는다는 op 명령문에 유의하십시오 (readline()이 반환되었음을 의미 함). 그래도, 나는 네가 옳다고 생각한다. – goat

+0

@chris : 아, 그리워. 나는 socket_write가 암시 적으로 개행을 추가하지 않으면 OP *가 클라이언트로부터 메시지를 얻는 방법을 보지 못합니다 ... 아니면 PHP 스크립트가 포기하고 소켓을 닫았습니다. –

관련 문제