服务端

udp_server.php

  1. <?php
  2. // 创建Server对象,监听 127.0.0.1:9502端口,类型为 SWOOLE_SOCK_UDP
  3. $server = new Swoole\Server('127.0.0.1', 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);
  4. // UDP 服务器与 TCP 服务器不同,UDP 没有连接的概念。
  5. // 启动 Server 后,客户端无需 Connect,直接向 Server 9502 端口发送数据包。
  6. $server->on('Packet', function ($server, $data, $clientInfo) {
  7. echo 'udp request data : ', $data ,"\n";
  8. // $server->sendto 方法向客户端发送数据
  9. // $clientInfo 是客户端的相关信息,是一个数组,有客户端的 IP 和端口等内容
  10. $server->sendto($clientInfo['address'], $clientInfo['port'], "Server ".$data);
  11. var_dump($clientInfo);
  12. });
  13. // 启动服务器
  14. $server->start();
  15. ?>

客户端

udp_client_protocol_udp.php

  1. <?php
  2. // 创建一个 UDP 连接
  3. $client = new Swoole\Client(SWOOLE_SOCK_UDP, SWOOLE_SOCK_SYNC);
  4. // 发送到服务端的数据
  5. $client->sendto('127.0.0.1', 9502, "client send data : hello World! ");
  6. // 打印服务端返回的数据
  7. echo $client->recv(), "\n";
  8. ?>

执行代码

  1. ## 服务端
  2. [server] php udp_server.php
  3. ## 客户端
  4. [client] php udp_client_protocol_udp.php
  5. Server client send data : hello World!
  6. [client]
  7. ## 再次查看客户端
  8. [server] php udp_server.php
  9. udp request data : client send data : hello World!
  10. array(4) {
  11. ["server_socket"]=>
  12. int(3)
  13. ["server_port"]=>
  14. int(9502)
  15. ["address"]=>
  16. string(9) "127.0.0.1"
  17. ["port"]=>
  18. int(40529)
  19. }