![](/img/trans.png)
[英]How can I tell Perl's IO::Socket::INET which interface to use?
[英]How can I specify which port to use in Perl's IO::Socket::INET?
我正在使用IO :: Socket :: INET在程序中創建進程間通信。 我需要在TCP客戶端中使用特定的端口號。 我在Perl doc中遵循該示例,但是它不起作用。 這是我的代碼:
舊代碼(有效):
tx_socket = new IO::Socket::INET->new('127.0.0.1:8001') || die "Can't connect to 127.0.0.1:8001 : $!\n";
新代碼(不起作用):
tx_socket = new IO::Socket::INET->new('127.0.0.1:8001', LocalPort=>9000 ) || die "Can't connect to 127.0.0.1:8001 : $!\n";
有人知道怎么了嗎?
根據文檔 ,您應該執行以下操作:
$sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 8001,
LocalPort => 9000,
Proto => 'tcp'
) or die "Connect error: $!";
如果您修復丟失的逗號,格蘭特·麥克萊恩(Grant McLean)的答案有效,但此處的“有效”可能與您的期望有關。
use IO::Socket::INET;
$sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 8001,
LocalPort => 9000,
Proto => 'tcp'
);
die("No socket!\n") unless $sock;
print "Socket good!\n";
運行此結果:
No socket!
這不是因為代碼不起作用,而是按預期運行(以我為例)。 也就是說,預期到本地主機端口8001的連接將失敗,而另一端沒有任何監聽。 這說明了錯誤報告的有用性:
use IO::Socket::INET;
$sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 8001,
LocalPort => 9000,
Proto => 'tcp'
) or die("$!\n");
die("No socket!\n") unless $sock;
print "Socket good!\n";
現在運行哪個會產生:
Connection refused
如果我在端口8001上運行netcat偵聽,則會得到不同的結果:
Socket good!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.