1.UDP服务器与TCP服务器区别: UDP没有连接的概念。启动Server后,客户端无需Connect,直接可以向Server监听的端口发送数据包,对应的事件为onPacket。 $clientInfo是客户端的相关信息,是一个数组,有客户端的IP和端口等内容,调用 $server->sendto 方法向客户端发送数据。
2.服务器端程序代码 udp_server.php <?php //创建Server对象,监听 127.0.0.1:9502端口,类型为SWOOLE_SOCK_UDP $server = new swoole_server('127.0.0.1',9502,SWOOLE_PROCESS,SWOOLE_SOCK_UDP); //设置开启的worker数 //命令行查看server开启的worker数 //如果当前文件名为 udp_server.php,则 ps aft | grep udp_server.php $server->set([ 'worker_num' => 4,// 初始工作进程数 'daemonize' => false,// 后台运行 ]); //监听数据接收事件 $server->on('packet',function ($server,$data,$client_info) { echo "接收到客户端信息: " . $data . PHP_EOL; var_dump($client_info); // 由于UDP协议不能确保信息送达,所以当服务端收到信息后最好做个应答,这样客户端才有依据来做判断 $server->sendto($client_info['address'],$client_info['port'],"This is server..." . PHP_EOL); }); //启动服务器 $server->start();
3.客户端程序代码 udp_client.php <?php $client = new swoole_client(SWOOLE_SOCK_UDP,SWOOLE_SOCK_SYNC); $client->sendto('127.0.0.1',"I am client...".PHP_EOL); echo $client->recv() . PHP_EOL;
4.服务器端执行程序 php udp_server.php 在命令行下运行 udp_server.php 程序,启动成功后可以使用 netstat -an | grep 9502 看到,已经在监听 9502 端口。
5.客户端执行程序 php udp_client.php
6.服务器端执行结果 例如: 接收到客户端信息: I am client... array(4) { ["server_socket"] => int(3) ["server_port"] => int(9502) ["address"] => string(9) "127.0.0.1" ["port"] => int(48866) }
7.客户端执行结果 This is server...
? (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|