监听多个UDP客户端并将报文转发到非发送来源的UDP客户端

forgaoqiang

有这么一个需求,监听一个UDP端口,UDP报文从不同的客户端发送过来,
收到报文后将报文转发到非发送者的其它UDP客户端那边

现在问题就在于怎么用服务端这个UDP接收的socket发送内容给不同的其它UDP客户端,workerman有封装方法这么做么,我看到的

connection->send() 都是发送消息回当前发送UDP报文过来的客户端

1939 1 1
1个回答

喵了个咪

发到其它客户端这个估计有点难度,因为其它客户端可能在局域网里,udp又是无连接的,如果服务端到其它客户端没打通udp通道,基本无法给他发送的。
如果客户端是暴露在外网的,并且监听了udp端口,这种可以发。大概这样发,没测试过,你试下吧。

$client = stream_socket_client('udp://ip:port');
fwrite($client, $data);
  • forgaoqiang 2021-07-30

    感谢回复 我在问题中忽略了很多细节 客户端保活以及可达性都做了处理 以及发过来数据的客户端IP端口等进行了记录 这个可达性本身没问题 现在的问题重点是:

    如何用workerman自身的监听UDP的进程本身发数据回给各个其它的客户端,C中有方法可以直接回给指定IP和端口的方法,没有注意到php中哪个方法可用,sendto方法视乎是最接近的,但是没看明白在哪个参数配置对方的IP和端口

  • 喵了个咪 2021-08-12

    我发的代码里,$client = stream_socket_client('udp://ip:port'); ip和port不就是ip和端口么?

年代过于久远,无法发表回答
🔝