
正文
php接受udp数据 php udp
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
接收到UDP数据包
接收到UDP数据包很正常的,不过断网的话就不知道是怎么回事了。应该是你电脑或者电信的问题了。
相关问答
Q1: 怎样使用php实现tcp/udp通讯
1.在socket_bindphp接受udp数据的时候ip地址不能真回环地址如127.0.0.1
2.server.php后台跑起来php接受udp数据的时候nohup php server.php /var/tmp/a.log 21
一php接受udp数据: udp 方式
1) server.php
?php //error_reporting( E_ALL ); set_time_limit( 0 ); ob_implicit_flush(); $socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP ); if ( $socket === false ) { echo "socket_create() failed:reason:" . socket_strerror( socket_last_error() ) . "\n"; } $ok = socket_bind( $socket, '202.85.218.133', 11109 ); if ( $ok === false ) { echo "socket_bind() failed:reason:" . socket_strerror( socket_last_error( $socket ) ); } while ( true ) { $from = ""; $port = 0; socket_recvfrom( $socket, $buf,1024, 0, $from, $port ); echo $buf; usleep( 1000 ); } ?
2) client.php
?php $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); $msg = 'hello'; $len = strlen($msg); socket_sendto($sock, $msg, $len, 0, '202.85.218.133', 11109); socket_close($sock); ?
二: TCP 方式
1)server.php
?php //error_reporting( E_ALL ); set_time_limit( 0 ); ob_implicit_flush(); $socket = socket_create( AF_INET, SOCK_STREAM, SOL_TCP ); socket_bind( $socket, '192.168.2.143', 11109 ); socket_listen($socket); $acpt=socket_accept($socket); echo "Acpt!\n"; while ( $acpt ) { $words=fgets(STDIN); socket_write($acpt,$words); $hear=socket_read($acpt,1024); echo $hear; if("bye\r\n"==$hear){ socket_shutdown($acpt); break; } usleep( 1000 ); } socket_close($socket) ?
2) client.php
?php $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $con=socket_connect($socket,'192.168.2.143',11109); if(!$con){socket_close($socket);exit;} echo "Link\n"; while($con){ $hear=socket_read($socket,1024); echo $hear; $words=fgets(STDIN); socket_write($socket,$words); if($words=="bye\r\n"){break;} } socket_shutdown($socket); socket_close($sock); ?
Q2: 如何 监听,接收 所有UDP端口 数据
12端口就用12个线程去接收。 但处理都是一样的吧。
所以要有个事件 比如定义一个事件
public delegate void DataArrivalHandler(byte[] data);参数你定,或者(Stream s)之类,也可以是自定一个类(包含其它信息)继承EventArgs写个 (DataEventArgs e)
public event DataArrivalHandler OnDataArrived;
OnDataArrived+=()这里注册相应的方法,如果不同端口的处理不一样,就相应写不同的事件,当然也可以只定义一个方法,方法根据不同的端口处理。
while(true)
{
byte[] data = (获取)
这里获取数据后,直接调用
OnDataArrived(data)/OnDataArrived(stream)/OnDataArrived(new DataEventArgs (data,ip,port)之类,根据你定义的参数来。
}
而注册的方法里的具体实现,用委托异步调用. 方法体里执行
{
namedDelegate.beginEnvoke();
}
这样,数据处理就异步完成了。
避免数据丢失的话,做个保险。 把接收的数据放入定义的缓冲块里。 当接收的数据量到达一定程序后,取出部分处理,再加入新数据。
类似于TCP的的滑动窗口。 麻烦点,但实现了,效果会好的多。
--------------------------
为什么要用ThreadPool? 不便于控制状态。 当你的线程处理的业务非常单一时用它,这种情况需要不需额外的状态信息,比如就像你上面的每次有不同的byte[] data。
直接 new ThreadStart();
Q3: PHP服务端监听UDP通信方式
例子代码:
?php
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
$msg = "Ping !";
$len = strlen($msg);
socket_sendto($sock, $msg, $len, 0, '127.0.0.1', 1223);
socket_close($sock);
?
查看手册中相关的函数就知道进一步应该怎么编程。
Q4: php socket udp 通信
与设备发送数据的程序编写人协调php接受udp数据,在发送的数据前面添加一个标识设备ID的内容php接受udp数据,这样接收数据后从数据判断设备号,而不是通过IP和PORT。
例如约定用两位数表示设备ID,那么设备01发送的数据是AAAAA修改为发送01AAAAA,收到数据后识别01为设备号,后面的AAAAA作为数据。
关于php接受udp数据和php udp的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






