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

时间:2014-01-28 18:41:49

标签: php web udp client fsockopen

以下代码在我从我的Linux服务器运行时,发送一个UDP数据包,其地址为我的Web客户端udp://192.168.1.107:2159。但是,当我从客户端使用代码中显示的地址Linux服务器地址调用相同的网页时,不会发出UDP数据包。我尝试了带有chrome的PC客户端和带有Safari的Mac客户端。此外,phpinfo()显示allow_url_fopen为“On”。此外,我尝试了没有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);
}

2 个答案:

答案 0 :(得分:1)

该端口是fsockopen()第二个参数。它需要通过与域名隔离。像这样:

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

答案 1 :(得分:0)

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

我不知道Wireshark是否将数据包标记为其他内容,或者就Wireshark而言,PHP生成的数据包中有什么模糊不清的地方?奇怪的是当我从Java应用程序传输相同的数据包时,Wireshark会抓住它!我不知道所有原因。但我让PHP fsockopen工作,所以我的工作完成了!它适用于Linux和Mac OS 10,适用于客户端和服务器的所有组合,非常棒!