为什么使用php fsockopen未从客户端网页发送到服务器的UDP数据包



下面的代码在我从Linux服务器运行的UDP client udp udp://192.168.1.107:2159时将其发送UDP数据包。但是,当我从客户端拨打使用代码中显示的地址Linux服务器地址的同一网页时,没有发出UDP数据包。我尝试了使用Chrome的PC客户端和Safari的Mac客户端。另外,phpinfo()表明允许_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!rn";
    fwrite( $fsocket, $out );
    fflush( $fsocket );
    fclose($fsocket);
}

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

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

问题...您不能总是相信Wireshark!我过多地信任Wireshark。我创建了一个Java应用程序,以从基于Web的PHP FSOCKOPEN数据包传输中接收。低和看,Java也会捕获包数据包,Wireshark也错过了数据包。失败的Wireshark情况是Mac(客户端PHP Web Call),Linux(Wireshark Session和PHP Web服务器)。

我不知道Wireshark是否将数据包标记为其他内容,或者就Wireshark而言,PHP生成的数据包中存在一些晦涩的东西?奇怪的是,当我从Java应用程序Wireshark传输相同的数据包时!我不知道为什么。但是我让php fsockopen上班了,所以我的工作完成了!它在Linux和Mac OS 10之间在客户端和服务器的所有组合中都起作用,因此很棒!

最新更新