如何通过互联网使套接字工作?
对于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',
);
我错过了什么?
答案 0 :(得分:1)
如果您未在路由器本身上运行此代码,那么您尝试连接的主机/端口不是“本地”#34;。请改为PeerAddr
和PeerPort
。
如果没有这个诀窍,我们需要更多信息。至少,告诉我们 如何失败。理想情况下,提供一个简短但可运行的自包含示例,以便我们可以自己尝试查看出错的地方。
另外,作为旁注,使用间接对象表示法(new IO::Socket::INET
)通常被认为是不推荐的做法。直接对象表示法(IO::Socket::INET->new
)是公认的当前实践,因为它避免了perl二进制文件可能出现的歧义和错误的解析。
答案 1 :(得分:0)
最可能的答案是路由器尚未正确配置。如果您不确定您的perl代码,请使用netcat或telnet等工具在本地和远程测试连接。我希望你会发现库存tcp工具也无法远程连接。