كيف يمكنني تحديد المنفذ الذي يجب استخدامه في Perl's 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

إذا قمت بتشغيل Netcat الاستماع على المنفذ 8001 ، أحصل على نتيجة مختلفة:

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