PHP Socket Java消息交换

我正在尝试在PHP页面和运行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代码不打印任何内容。

可能是什么问题呢?

先谢谢你。

PS可能值得一提的是,我通过AJAX访问此网页,因此它将结果“回显”回到其他页面。

我个人更喜欢socket_*函数。 但无论哪种方式,您可能都缺少检查终止字符:

 $sock = socket_create(AF_INET, SOCK_STREAM, 0); socket_connect($sock, $host, $port); socket_write($sock, $str); $response = ''; while($resp = socket_read($sock, 1024)) { if(!$resp) break; $response .= $resp; if(strpos($resp, "\n") !== false) break; } echo "Server said: {$response}"; 

尝试在fsockopen()之后添加:

 stream_set_blocking($fp,0); $info=stream_get_meta_data($fp); if ($fp) { fputs($fp,$str); $reply=''. while (!feof($fp) && !$info['timed_out']) { $reply.=fgets($fp); echo $reply; } close($fp); 

我的朋友发给我这个链接http://abejali.com/?p=56有一个非常好的代码可以解决问题。 内部有一个技巧可以解决问题

以下代码有效。 诀窍是添加chr(13)。 chr(10)到字符串的末尾。

 $str.= chr(13) . chr(10); stream_set_blocking($fp,0); $info=stream_get_meta_data($fp); if ($fp) { fputs($fp,$str); $reply=''; while (!feof($fp) && !$info['timed_out']) { $reply.= fread($fp, 1); } echo $reply; }