كيف يمكنني تحديد المنفذ الذي يجب استخدامه في Perl's 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
إذا قمت بتشغيل Netcat الاستماع على المنفذ 8001 ، أحصل على نتيجة مختلفة:
Socket good!
نصائح أخرى
وفق وثائق, ، يجب أن تفعل شيئًا مثل:
$sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 8001,
LocalPort => 9000,
Proto => 'tcp'
) or die "Connect error: $!";
لا تنتمي إلى StackOverflow