首页 / PHP / 在PHP中接收UDP数据包数据报
在PHP中接收UDP数据包数据报
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在PHP中接收UDP数据包数据报,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1898字,纯文字阅读大概需要3分钟。
内容图文
![在PHP中接收UDP数据包数据报](/upload/InfoBanner/zyjiaocheng/778/ec050ea44ade4135a6cc79a9ccf3547f.jpg)
我正在使用php为GPS跟踪系统构建一个监听服务器. GPS通过UDP数据包发送数据,我可以通过运行以下脚本来显示.然而,实际数据以符号形式出现,所以我猜我错过了转换
//Reduce errors
error_reporting(~E_WARNING);
//Create a UDP socket
if(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
echo "Socket created \n";
// Bind the source address
if( !socket_bind($sock, "192.168.1.29" , 1731) )
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not bind socket : [$errorcode] $errormsg \n");
}
echo "Socket bind OK \n";
//Do some communication, this loop can handle multiple clients
while(1)
{
echo "\n Waiting for data ... \n";
//Receive some data
$r = socket_recvfrom($sock, $buf, 512, 0, $remote_ip, $remote_port);
echo "$remote_ip : $remote_port -- " . $buf;
//Send back the data to the client
//socket_sendto($sock, "OK " . $buf , 100 , 0 , $remote_ip , $remote_port);
}
socket_close($sock);
解决方法:
我以前没有用PHP做过这个,但我的第一个猜测是你得到一个二进制字符串,你需要转换成ASCII(或你正在使用的任何字符集).
看起来你应该可以使用PHP的unpack了.
很难确切地知道提供包的格式,而不知道你要回来的数据.看起来unpack会至少能够返回一个十进制值数组(假设你得到了字符),然后你可以用chr转换成ASCII.它可能是这样的:
//Receive some data
$r = socket_recvfrom($sock, $buf, 512, 0, $remote_ip, $remote_port);
//Convert to array of decimal values
$array = unpack("c*chars", $buf);
//Convert decimal values to ASCII characters:
$chr_array = array();
for ($i = 0; $i < count($array); $i++)
{
$chr_array[] = chr($array[$i]);
}
这取决于协议设计,你需要解析二进制数据的复杂程度(也就是说,你只是发送字符串数据,还是整数和字符串的混合等等……你需要相应地解析二进制数据).
编辑:我已经更新了格式字符串以匹配无限数量的字符,使用数组元素名称’chars’按照here列出的格式.
编辑:添加了一些基本的ASCII转换代码示例.
内容总结
以上是互联网集市为您收集整理的在PHP中接收UDP数据包数据报全部内容,希望文章能够帮你解决在PHP中接收UDP数据包数据报所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。