我試圖在PHP頁面和運行Java服務器之間進行通信。 只需通過套接字進行簡單的字符串交換。PHP Socket Java消息交換
這是我的Java代碼線程處理連接:
InputStream in = clientSocket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
String request;
if((request=br.readLine())!=null){
System.out.println("got the following request: " + request);
out.write(request +"\n");
out.flush();
out.close();
in.close();
}
我與發送該字符串,然後接收結果並打印回簡單的Java客戶端測試它和它的工作。客戶端和服務器都有相同的輸出。
這是我的PHP代碼:
$fp = @fsockopen ($host, $port, $errno, $errstr);
if($fp){
fputs($fp, $str);
//echo fgets($fp);
}
close($fp);
它發送字符串到服務器,服務器接收它。 但是,一旦我用fgets($ fp)取消註釋,我會被阻止,直到1-2分鐘後發生某種超時。在這期間,我的服務器沒有收到任何東西。 超時後,我的服務器打印,它已收到該行,並可能發回響應,但是,PHP代碼不會打印任何內容。
可能是什麼問題?
預先感謝您。
P.S.可能值得說的是,我通過AJAX訪問此網頁,因此它將結果「回聲」回到其他頁面。
現在阻塞消失了,但我仍然沒有得到任何與fgets()。 – Hippopotamus 2010-11-12 16:28:54
似乎服務器期待換行符終止的字符串。你試過'fputs($ fp,$ str。「\ n」);'? – stillstanding 2010-11-12 16:33:08
Java服務器獲取$ str,因爲我現在擁有它,沒有「\ n」 – Hippopotamus 2010-11-12 16:43:35