【发布时间】:2015-08-28 17:18:11
【问题描述】:
我有一个正在监听请求的 Java 服务器和一个发送这些请求的 PHP 页面。
连接到服务器后,我使用“socket_write”命令编写一些内容,然后尝试使用“socket_read”读取服务器答案。 (而不是等待答案,我想知道如何正确同步两个程序,例如信号量)。
代码如下:
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
$con = socket_connect($socket, "127.0.0.1",6543);
//Connected, we can ask
$message = "SLICE";
socket_write($socket,$message,strlen($message));
$buf = socket_read($socket,2048,PHP_NORMAL_READ);
echo $buf;
socket_close($socket);
java 服务器使用套接字的 InputStream 监听请求。 当我注释 $buf = socket_read 和 echo $buf 这两行时,服务器能够获得“SLICE”消息。 但是,如果我这样离开它,似乎 PHP 会写入套接字,然后在我的 java 服务器能够读取套接字之前通过尝试读取它来直接垄断套接字!
然后我的 Java 服务器在“readline();”上被无限阻塞而 PHP 在 socket_read 上也被阻塞了。
如何同步所有这些?
【问题讨论】:
-
需要 Java 代码。但是从套接字阅读很容易,您应该可以复制任何有关该主题的教程。
-
在不知道 Java 代码在做什么的情况下,我只能冒险猜测您需要换行符什么的?试试 $message = "SLICE" 。 PHP_EOL;
-
是的,使用 PHP.EOL 可以完美运行!谢谢!