0

プログラムでプロセス間通信を作成するために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"; 

誰が何が悪いのか知っていますか?

4

2 に答える 2

1

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!

これは、コードが機能しないためではなく、期待どおりに機能しています (私の場合)。つまり、localhost ポート 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!
于 2010-04-29T03:49:08.477 に答える
1

documentationによると、次のようなことを行う必要があります。

$sock = IO::Socket::INET->new(
    PeerAddr  => '127.0.0.1',
    PeerPort  => 8001,
    LocalPort => 9000,
    Proto     => 'tcp'
) or die "Connect error: $!";
于 2010-04-29T01:42:48.743 に答える