Perlのio :: socket :: inetで使用するポートを指定するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2734251

  •  02-10-2019
  •  | 
  •  

質問

使ってます 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: $!";
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top