2010-04-29 132 views
0

我正在使用IO::Socket::INET在我的程序中創建進程間通信。我需要在我的TCP客戶端中使用特定的端口號。我正在使用Perl文檔中的示例,但它不起作用。這裏是我的代碼:如何指定在Perl的IO :: Socket :: INET中使用哪個端口?

舊代碼(工作):

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"; 

有誰知道什麼是錯?

+1

爲什麼你在同一個對象上調用'new'兩次?請參閱http://stackoverflow.com/questions/429657/what-is-the-difference-between-new-s-the-disference-between-new-someclass-and-someclass-new-in-perl – Ether 2010-04-29 02:14:09

回答

1

格蘭特麥克萊恩的回答作品,如果您修復丟失的逗號,但「作品」這裏可能是相對於你期待什麼。

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 

如果我運行netcat的端口8001聽,我得到了不同的結果:

Socket good! 
+0

謝謝kbenson和Grant,它現在正在使用您發佈的代碼進行工作。 – alex 2010-04-29 16:38:42

1

the documentation,你應該做的是這樣的:

$sock = IO::Socket::INET->new(
    PeerAddr => '127.0.0.1', 
    PeerPort => 8001, 
    LocalPort => 9000, 
    Proto  => 'tcp' 
) or die "Connect error: $!"; 
+0

我也試過這種格式,INET函數調用不返回有效的套接字。我在代碼後調用了$ sock-> print,Perl抱怨$ sock是一個未定義的值。 – alex 2010-04-29 01:53:07

+0

如果新方法返回undef,那麼您應該在$!中查找錯誤消息。我已經添加了上面的錯誤檢查。 – 2010-04-29 11:10:02

相關問題