互联网Perl上的套接字通信

时间:2013-12-09 07:58:08

标签: perl sockets tcp

如何通过互联网使套接字工作?

对于TCP服务器,我在本地IP中创建了一个套接字,并设置了路由器的端口转发。

对于客户端,我将路由器的IP地址设为PeerAddr(对等地址)。从远程计算机启动客户端时,它无法正常工作。

〜对不起,我现在很清楚,下面是片段〜
更新: 服务器片段:

$server_socket = new IO::Socket::INET (
                     LocalHost => '192.168.0.4',
                     LocalPort => '1080',
                     Proto     => 'tcp',
                     Listen    => 300,
                     Reuse     => 1,
                     Type      => SOCK_STREAM,
                 )
                   or die "ERROR in Socket Creation: $!\n";

客户端代码段:

my $socket = IO::Socket::INET->new (
                 PeerHost => '117.97.148.228',# router ip example
                 PeerPort => '1080',
                 Proto    => 'tcp',
             );

我错过了什么?

2 个答案:

答案 0 :(得分:1)

如果您未在路由器本身上运行此代码,那么您尝试连接的主机/端口不是“本地”#34;。请改为PeerAddrPeerPort

如果没有这个诀窍,我们需要更多信息。至少,告诉我们 如何失败。理想情况下,提供一个简短但可运行的自包含示例,以便我们可以自己尝试查看出错的地方。

另外,作为旁注,使用间接对象表示法(new IO::Socket::INET)通常被认为是不推荐的做法。直接对象表示法(IO::Socket::INET->new)是公认的当前实践,因为它避免了perl二进制文件可能出现的歧义和错误的解析。

答案 1 :(得分:0)

最可能的答案是路由器尚未正确配置。如果您不确定您的perl代码,请使用netcat或telnet等工具在本地和远程测试连接。我希望你会发现库存tcp工具也无法远程连接。