免费注册 查看新帖 |

Chinaunix

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

我的socket哪写错了? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-20 15:28 |只看该作者 |倒序浏览
server端:

  1. #!/usr/bin/perl

  2. use strict;
  3. use IO::Socket;

  4. my $port = '3000';
  5. my $sock = IO::Socket::INET->new(
  6.     Listen => SOMAXCONN,
  7.     LocalPort => $port,
  8.     Timeout => 60,
  9.     Reuse => 1,
  10.     Proto => 'tcp')  or die "Create Server ERROR:$!\n";

  11. warn "Starting server on port $port...\n";

  12. while(1){
  13.       next unless my $session = $sock->accept;
  14.       defined (my $pid = fork()) or die "can't fork\n";

  15.       if($pid == 0){
  16.          $sock->close;
  17.           $session->autoflush(1);

  18.           my $line = <$session>;
  19.           print "$line\n";
  20.          
  21.           print $session "Nice to meet you,too!\n";
  22.           close $session;
  23.           exit 0;
  24.       }else{
  25.             print "Forking child $pid\n";
  26.       }
  27. }
  28. close $sock;
复制代码



client端:


  1. #!/usr/bin/perl

  2. use strict;
  3. use IO::Socket;

  4. my $addr = '127.0.0.1';
  5. my $port = '3000';
  6. my $buf;

  7. my $sock = IO::Socket::INET->new(
  8.     PeerAddr =>$addr,
  9.     PeerPort =>$port,
  10.     Proto => 'tcp') or die "Can't connect: $!\n";

  11. print $sock "Nice to meet you!\n";
  12. $buf = <$sock>;
  13. print "$buf\n";
  14. close $sock;
复制代码


1.server首先建立监听
2.启动client向server发送个"Nice to meet you!"消息
3.server受到后向client回复个"Nice to meet you,too!"消息

但没有实现,
现在server窗口里有:Starting server on port 3000...
并且收到client发来的"Nice to meet you!"
可为什么client窗口里没有任何返回呢,应该有"Nice to meet you,too!"呀.
大家帮我看看哪写错了,多谢.

[ 本帖最后由 wsliuhao 于 2007-6-21 08:57 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-06-20 16:09 |只看该作者
server:
perl区分大小写:

    listen => SOMAXCONN,
    Localport => $port,

   defined (my $pid = fock()) or die "can't fork\n";   #是不是该写成die "can't fock\n"还是....?

    while(my $line = <$session>){
                print "$line\n";
     }  这样他就卡在这了,不往下走了,   直接  $line=<$session>;

client:

    Peeraddr =>$addr,
    Peerport =>$port,

论坛徽章:
0
3 [报告]
发表于 2007-06-20 18:02 |只看该作者
大家再帮我看看啦,这个应该是最简单的C/S交互的例子啦,居然通不过,怎么理论和实践不一致呢???

论坛徽章:
0
4 [报告]
发表于 2007-06-20 19:07 |只看该作者
...你把我说的那几个地方改改就可以了,因为我发帖前就试了,不过改好的代码删了,
LocalPort , PeerPort, PeerAddr, 看明白了吗?

论坛徽章:
0
5 [报告]
发表于 2007-06-21 09:12 |只看该作者
谢谢tmp,的确是没有大写的原因!
但没有大写的时候,我在使用new方法创建一个$sock对象后print $sock,也是返回了一个IO::Socket::INET对象的引用啊,和改成大写后没有任何区别,在我本地执行print的结果都是IO::Socket::INET=GLOB(0x1bf64b0).
可是现实情况是没有大写的(PeerAddr 写成了Peeraddr之类)建立的$sock不能互相传递消息,何解??


还有我现在改成大写之后,只有server能受到client发的消息,而client没有得到server的回应,这是怎么回事?

论坛徽章:
0
6 [报告]
发表于 2007-06-21 11:54 |只看该作者
server 向client 发送数据使用的句柄(文件描述符?) 是最开始用new建立的?
还是后期listen时accept后建立的?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2007-06-21 12:05 |只看该作者
有例子不看,在这里瞎折腾什么呀。
perldoc perlipc 看 Socket 一节。

论坛徽章:
0
8 [报告]
发表于 2007-06-21 13:34 |只看该作者
呵呵,在你看来当然是'瞎折腾了',这个词很伤人心的..
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP