2012-05-19 26 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隱式添加行終止符,否則您需要自行完成,以便Java方面看到您已經編寫了完整的文本行。

+0

好的。所以我需要在回覆後添加一個換行符! –

+0

請注意op的聲明,即服務器從php獲取消息(暗示readline()已返回)。雖然,我仍然認爲你是對的。 – goat

+0

@chris:啊,我錯過了。我沒有看到OP *將如何從客戶端獲取消息,除非socket_write真的隱式添加了新行......或者PHP腳本放棄並關閉了套接字。 –

相關問題