簡體   English   中英

如何指定在Perl的IO :: Socket :: INET中使用哪個端口?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM