免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4356 | 回复: 6
打印 上一主题 下一主题

Perl UDP Server 如何区分客户端 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-15 16:10 |只看该作者 |倒序浏览
本帖最后由 r_zack 于 2010-12-15 16:18 编辑

大家好,打听一下,用Perl做的UDP Server,在收到客户端A发来的消息和客户端B发来的消息后,如果想主动给客户端A发消息,要怎么做?

我是用如下代码生成socket:
  1. #!/usr/bin/perl
  2. use IO::Socket::INET;
  3. my $socket = IO::SOCKET::INET->new(
  4.     LocalPort => 90,
  5.     Proto => 'udp');
复制代码
并用如下代码读取内容:
  1. while(1) {
  2.     if ($socket->recv($buff, 1024, 0) {
  3.         ....
  4.         $socket->recv($buff, 1024,0);
  5.         ....
  6.     }
  7. }
复制代码
我从前只做过TCP Socket,因为可以$client = $socket->accept,所以随时可以方便的往客户端写东西,
最近看了骆驼书上粗浅的讲解后开始试验,后发现,TCP Socket的循环中可以一次循环只处理一个客户端,其他客户端通过fork来处理;
而UDP,我看了cpan上面IO::Socket::INET简陋的文档后完全搞不明白,看了网上的一些示例后才搞明白了如上的代码,可是发现UDP的读取方式不是“每个客户端都有不同的Socket”,而是服务端读取消息的时候使用“面向所有客户端”的socket,那如果像上面第二段代码中的两次读取中,分别受到了来自客户端A和客户端B的两条消息后,我想只对客户端A发送一段话,应该怎么做呢?

论坛徽章:
0
2 [报告]
发表于 2010-12-15 16:37 |只看该作者
既然udp是无连接的,你主动往对方发送消息不就行了。。
peeraddr ()这个方法可以得到对方地址。

论坛徽章:
0
3 [报告]
发表于 2010-12-15 17:07 |只看该作者
本帖最后由 r_zack 于 2010-12-15 17:12 编辑

谢谢您,我之前从CPAN的文档看到这个函数了,也测试过了,我不明白的地方是,我要怎么给客户端发送消息?
我试过下面这个方法,可是客户端没有收到消息:
$peer = $socket->peeraddr;
$socket->send($text, 0, $peer);
是不是$peer还需要怎么加工一下?
我只知道$peer的位置应该是sockaddr_in格式的值,peeraddr产生的是这个格式的吗?

论坛徽章:
0
4 [报告]
发表于 2010-12-15 17:22 |只看该作者
本帖最后由 黑色阳光_cu 于 2010-12-15 17:26 编辑

recv的返回值

http://perldoc.perl.org/functions/recv.html

论坛徽章:
0
5 [报告]
发表于 2010-12-15 17:37 |只看该作者
搞定啦!谢谢大家!!
  1. $peer = $socket->recv($buff, 1024, 0);
  2. $socket->send("Thank you guys!", 0, $peer);
复制代码

论坛徽章:
0
6 [报告]
发表于 2010-12-15 17:42 |只看该作者
之前看send的文档时没注意,刚才才发现文档里有个链接
http://perldoc.perl.org/perlipc.html#UDP%3a-Message-Passing
早看到就好了……怪我太浮躁了

论坛徽章:
0
7 [报告]
发表于 2010-12-16 21:29 |只看该作者
你確定知道什麼是UDP協議麼??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP