2011-05-27 92 views
2

我的代码是这样的,但是不工作运输端点没有连接

<?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端点没有连接

感谢

回答

2

你必须先接受连接!里面你while()循环,另做while()这样的:

while($client = socket_accept($sock)) { 
    $buffer=socket_read($client, 512); 
    echo "Buffer = $buffer \n"; 
} 

它应该工作,你打算。

+0

当你将代码添加到上面时,我们得到:''Warning:socket_accept():无法接受传入连接[22]:第9行/share/web/gps/gateway2.php中的无效参数'“,第9行指的是'while($ client = socket_accept($ sock))'。 – trejder 2012-09-13 22:44:40

+1

我相信你没有定义'$ sock'。这将是这样''sock = socket_create(AF_INET,SOCK_STREAM,0);' – 2012-09-14 11:36:12

+0

是的!我已经根据[PHP.net页面]上的PHP示例(http://php.net/manual/en/sockets.examples.php)自己弄明白了这一点。我甚至发布了更正(修复了一些错误)和更新的示例,但在PHP.net的白痴已经删除它没有任何通知。 – trejder 2012-09-16 05:59:19

1

OK,所以客户端套接字未连接。

什么是协议'0'?你确定系统上的'0'是TCP吗? 不确定在connect()之后是否可以更改套接字块/非块状态 - 从未尝试过这样的事情。 如果$ sk为false,那么最后一个错误是什么? 服务器在10.0.1.43:1234可以通过TCP到达吗?

RGDS, 马丁

+0

我的ip可以访问,我已testing.Now它通过编辑一些代码工作正常。但仍然不工作,当我从另一个系统运行此URL。 – 2011-06-02 05:57:13

0

正如我在以前的答案评论中写道,你可以找到PHP.net Examples Page解决这一问题的很好的例子。在主要文章中,您将找到一个很好的例子,如何让听众没有错误,您是指一个客户,并且在下面的javier的通知中,如何为多客户端目的提供相同的服务。