为什么不使用PHP fsockopen将UDP数据包从客户端网页发送到服务器?

为什么不使用PHP fsockopen将UDP数据包从客户端网页发送到服务器?,php,web,udp,client,fsockopen,Php,Web,Udp,Client,Fsockopen,下面的代码在我使用web客户端的地址从Linux服务器运行UDP数据包时发送一个UDP数据包udp://192.168.1.107:2159. 但是,当我使用代码中显示的地址Linux服务器地址从客户端调用相同的网页时,不会发出UDP数据包。我试过使用chrome的PC客户端和使用Safari的Mac客户端。另外,phpinfo()显示allow_url_fopen处于“打开”状态。此外,我还尝试了不使用fflush()函数的代码 客户端网页和PHP套接字是否有限制?我在网上没看到这个。顺便说

下面的代码在我使用web客户端的地址从Linux服务器运行UDP数据包时发送一个UDP数据包udp://192.168.1.107:2159. 但是,当我使用代码中显示的地址Linux服务器地址从客户端调用相同的网页时,不会发出UDP数据包。我试过使用chrome的PC客户端和使用Safari的Mac客户端。另外,phpinfo()显示allow_url_fopen处于“打开”状态。此外,我还尝试了不使用fflush()函数的代码

客户端网页和PHP套接字是否有限制?我在网上没看到这个。顺便说一下,我在同一台客户机上编写了一个Java应用程序,它将UDP数据包毫无问题地发送到地址和端口

phpinfo();

$errno = 0;
$errstr = "";
$fsocket = fsockopen("udp://192.168.1.103:2195", $errno, $errstr);
if( !$fsocket ) {
    echo "$errstr( $errno)<br/>\n";
} else {
    $out = "Oh ya baby!\r\n";
    fwrite( $fsocket, $out );
    fflush( $fsocket );
    fclose($fsocket);
}
phpinfo();
$errno=0;
$errstr=“”;
$fsocket=fsockopen(“udp://192.168.1.103:2195“,$errno,$errstr);
如果(!$fsocket){
回显“$errstr($errno)
\n”; }否则{ $out=“哦,宝贝!\r\n”; fwrite($fsocket,$out); fflush($fsocket); fclose($fsocket); }
端口是第二个参数。它需要独立于域名进行传递。像这样:

$fsocket = fsockopen("udp://192.168.1.103", 2195, $errno, $errstr);

这个问题。。。你不能总是相信线鲨!我太信任Wireshark了。我创建了一个Java应用程序来接收来自基于Web的PHP fsockopen数据包传输。瞧,Java抓住了数据包,Wireshark错过了数据包——每次都是如此。失败的Wireshark案例是Mac(客户端PHP web调用)、Linux(Wireshark会话和PHP web服务器)


我不知道Wireshark是否将该数据包标记为其他内容,或者就Wireshark而言,PHP生成的数据包中存在一些模糊的内容?奇怪的是,当我从Java应用程序传输相同的数据包时,Wireshark捕捉到了它!我不知道所有的原因。但是我让PHP FSock开放工作,所以我的工作就完成了!它可以在Linux和Mac OS 10之间以客户端和服务器的所有组合工作,太棒了

谢谢,但我也试过那个版本的电话,我不会把包拿出来。我想知道这是否是一个PHP设置为其他一些系统配置?这里是我尝试的文本。。。[代码]$fsocket=fsockopen(“udp://192.168.1.108“,2195,$errno,$errstr,30);[/code]不,应该可以。请首先在同一主机上的第二个终端上设置udp测试服务器,以确保没有防火墙禁止访问:
nc luv 2195
。然后在另一个终端上使用
udp://127.0.0.1
和端口
2195
。它在我的计算机上工作,我没有修改
php.ini
。选中此项: