【问题标题】:Perl UDP Server: How to retrieve client socket?Perl UDP 服务器:如何检索客户端套接字?
【发布时间】:2018-12-30 01:46:22
【问题描述】:

使用 TCP 服务器很容易获取客户端套接字:

$new_sock = $sock->accept();

但是,对于 UDP 服务器,似乎无法检索客户端套接字,因此我可以稍后参考。

Client_A->UDPServer (store client socket)
Client_B->UDPServer
Client_B<-UDPServer
Clinet_A<-UDPServer (retrieve client socket)

【问题讨论】:

  • UDP 不知道连接,所以那里没有accept 调用。
  • 您需要将recvsend 与套接字地址一起使用。文档中的示例:perldoc.perl.org/perlipc.html#UDP%3a-Message-Passing
  • 是的,解决了!
  • Re "UDP 不知道连接",是的,但是你仍然可以调用connectsend 设置默认地址,有效地使它看起来如果您只想与一个同伴交谈,就像有一个连接的概念。在 OP 的情况下,客户端可以使用此技巧,但不能使用服务器。

标签: perl sockets udp


【解决方案1】:

1) 保存收到数据报的每个客户端:

push @client, $sock->peername;

2) 在某个时候给他们一个答案 - 一次性:

for my $client( @client) {
    #send SOCKET,MSG,FLAGS,**TO**
    send($sock, "Hey\n", 0, $client);
    #                       ^^^^^^^ 4.Parameter: TO
}

【讨论】:

    猜你喜欢
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2015-03-09
    • 2012-07-22
    • 1970-01-01
    • 2016-06-04
    • 2019-12-24
    相关资源
    最近更新 更多