哪位兄弟能给个使用“Io_Socket”模块的perl例子,为更好理解!

哪位兄弟能给个使用“Io_Socket”模块的perl例子,为更好理解!

如题,查了些资料,大概明白IO_Socket的原理,网上的程序太复杂了,小弟还是新手,哪位兄弟能给个简单的例子实验下?
  use IO::Socket::INET;
  $socket = IO::Socket::INET->new(PeerAddr => $remote_host,
              PeerPort  => $remote_port,
              Proto => "tcp",
              Type => SOCK_STREAM)
     or die "Couldn't connect to $remote_hostremote_port: $!\n";
  # 通过套接字发送某些东西,

  print $soket "Why don't you call me anymore?\n";
  
  # 读取远端响应

  $answer = <$socket>;
  # 然后在结束之后终止联接。

  close($socket);
客户端代码

服务器端
use IO::Socket::INET;
  $server = IO::Socket::INET->new(LocalPort => $server_port,
              Type    => SOCK_STREAM,
              Reuse   => 1,
              Listen   => 10)   # 或者 SOMAXCONN

     or die "Couldn't be a tcp server on port $server_port: $!\n";
  while ($client = $server->accept()) {
     # $client 是新联接

  }
  close($server);
楼上的兄弟让我太感动了!
小弟谢过!


QUOTE:
原帖由 ynchnluiti 于 2008-10-16 18:42 发表
服务器端
use IO::Socket::INET;
  $server = IO::Socket::INET->new(LocalPort => $server_port,
              Type  ...

能否说一下具体怎么使用?

我将server端和client分别放在2台不同的机器上,用的是80端口,然后分别执行这2个脚本,没有print输出
首先说明自己写网络程序最好不要使用小于1024的端口号,另外要确认服务器端启动成功。
服务器 运行于192.168.10.39:

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl -w

my $server_port = 12345;

use IO::Socket::INET;
$server = IO::Socket::INET->new(LocalPort => $server_port,
        Type    => SOCK_STREAM,
        Reuse   => 1,
        Listen   => 10)   # 或者 SOMAXCONN

or die "Couldn't be a tcp server on port $server_port: $!\n";
while ($client = $server->accept()) {
# $client 是新联接

    print $client "Welcome to use io_socket\n";
}
close($server);

客户端

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl -w

my $remote_host = "192.168.10.39";
my $remote_port = 123456;

use IO::Socket::INET;
$socket = IO::Socket::INET->new(PeerAddr => $remote_host,
        PeerPort  => $remote_port,
        Proto => "tcp",
        Type => SOCK_STREAM)
or die "Couldn't connect to $remote_host:$remote_port: $!\n";
# 通过套接字发送某些东西,

print $socket "Why don't you call me anymore?\n";

# 读取远端响应

$answer = <$socket>;
# 然后在结束之后终止联接。

print "$answer\n";

close($socket);

to 楼上的:

1,use 语句一般放在程序开头,你这种写法不常见;
2,IO::Socket 模块在使用时,一般是 use IO::Socket,但是 new 的时候仍然是 new IO::Socket::INET。
另外就是注意第一个命名参数也应该和下面的参数一样,另起一行。

右括号也要另起一行,然后把 or 和 它放在一起,就像这样:

new IO::Socket::INET(
    LocalAddr  => ......,
    .............
) or die ...........;


QUOTE:
原帖由 flw 于 2008-10-17 10:57 发表
to 楼上的:

1,use 语句一般放在程序开头,你这种写法不常见;
2,IO::Socket 模块在使用时,一般是 use IO::Socket,但是 new 的时候仍然是 new IO::Socket::INET。
另外就是注意第一个命名参数也应该和 ...

谢谢版主!  查了下资料,搞定了!

这样写规范吧


#!/usr/bin/perl -w

use strict;
use IO::Socket;

my $remote_host = '192.168.1.241';
my $remote_port = 9999;

my $socket = IO::Socket::INET->new(PeerAddr  => $remote_host,
                                   PeerPort  => $remote_port,
                                   Proto       => "tcp",
                                   Type        => SOCK_STREAM ) or die "Couldn't connect to $remote_host, $remote_port: $!\n";
            
             print "$socket,\t I'm is client\n";

my $answer = <$socket>;

close($socket);
楼上没看到2