我的代码是这样但不起作用
<?php
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
$sk = socket_connect($sock,"10.0.1.43","1234");
socket_set_nonblock($sock);
while (1) {
sleep(2);
$buffer=socket_read($sock,512);
echo "Buffer = $buffer \n";
echo "Last Error = ".socket_last_error($sock).socket_strerror(socket_last_error($sock))."\n";
}
?>
显示错误:
无法从套接字[107]读取:未连接传输端点
PHP堆栈跟踪:
缓冲区=
上次错误= 107Transport端点未连接
由于
答案 0 :(得分:2)
您必须先接受连接!在while()
循环内,执行另一个while()
,如下所示:
while($client = socket_accept($sock)) {
$buffer=socket_read($client, 512);
echo "Buffer = $buffer \n";
}
它应该可以正常工作。
答案 1 :(得分:1)
好的,所以客户端套接字没有连接。
什么是协议'0'?你确定系统上的'0'是TCP吗? 不确定是否可以在connect()之后更改套接字块/非阻塞状态 - 从未尝试过这样的事情。 如果$ sk为false,那么最后一个错误是什么? 是否可以通过TCP访问10.0.1.43:1234的服务器?
RGDS, 马丁
答案 2 :(得分:0)
正如我在上一篇回答的评论中所写,你可以在PHP.net Examples Page找到解决这个问题的好例子。在主要文章中,您将找到一个很好的示例,如何使一个没有错误的监听器,您正在引用一个客户端,并在下面的javier通知中,如何为多客户端目的使用相同的。