Perlの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";
誰もが何が悪いのか知っていますか?
解決
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!
他のヒント
によると ドキュメント, 、あなたは次のようなことをするべきです:
$sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 8001,
LocalPort => 9000,
Proto => 'tcp'
) or die "Connect error: $!";
所属していません StackOverflow