免费注册 查看新帖 |

Chinaunix

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

谁能给贴个用IO::Socket::INET写的client 和server 程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-07 18:07 |只看该作者 |倒序浏览
为什么书上的例子我运行不能交互哪,总是hang在那儿。

论坛徽章:
0
2 [报告]
发表于 2007-02-07 22:36 |只看该作者
原帖由 abcdefgx 于 2007-2-7 18:07 发表
为什么书上的例子我运行不能交互哪,总是hang在那儿。


1) 贴codes出来看看.
2) 见置顶帖子,偶写过例子.

论坛徽章:
0
3 [报告]
发表于 2007-02-08 14:41 |只看该作者
Server 程序如下,问题是在client端只能打印出welcome 行,不能打出command?行,为啥哪 ?

      #!/usr/bin/perl -w
      use IO::Socket;
      use Net::hostent;                     # for OO version of gethostbyaddr

      $PORT = 9000;                     # pick something not in use

      $server =        IO::Socket::INET->new( Proto         => 'tcp',
                                       LocalPort => $PORT,
                                       Listen         => SOMAXCONN,
                                       Reuse         => 1);

      die "can't setup server" unless $server;
      print "[Server $0        accepting clients]\n";

      while ($client = $server->accept()) {
        $client->autoflush(1);
        print $client "Welcome to $0; type help        for command list.\n";
        $hostinfo = gethostbyaddr($client->peeraddr);
        printf "[Connect from %s]\n", $hostinfo        ? $hostinfo->name : $client->peerhost;
        print $client "Command?        ";
        while (        <$client>) {
          next unless /\S/;          # blank line
          if        (/quit|exit/i)          { last;                                      }
          elsif        (/date|time/i)          { printf $client "%s\n", scalar localtime;  }
          elsif        (/who/i        )          { print  $client `who        2>&1`;                      }
          elsif        (/cookie/i )          { print  $client `/usr/games/fortune 2>&1`; }
          elsif        (/motd/i )          { print  $client `cat        /etc/motd 2>&1`;      }
          else {
            print $client "Commands: quit date who cookie motd\n";
          }
        } continue {
           print $client "Command? ";
        }
        close $client;
      }

论坛徽章:
0
4 [报告]
发表于 2007-02-08 14:50 |只看该作者
print $client "Command?        ";

后面加一句:

$client->shutdown(1);

告诉client本次写已完成.否则client会阻塞在那里等待SVR的继续写入.

论坛徽章:
0
5 [报告]
发表于 2007-02-08 15:04 |只看该作者
仙子,能贴一下你写的例子的链接吗,我想看看client应该怎么写,现在能输入command?了但是经常broken pipe。

论坛徽章:
0
6 [报告]
发表于 2007-02-08 15:24 |只看该作者
原帖由 abcdefgx 于 2007-2-8 15:04 发表
仙子,能贴一下你写的例子的链接吗,我想看看client应该怎么写,现在能输入command?了但是经常broken pipe。

http://bbs.chinaunix.net/viewthr ... &extra=page%3D1
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP