2010-07-23 84 views
-1
#!/usr/bin/perl -w 

use IO::Socket; 

my $sock = new IO::Socket::INET (
    PeerAddr => 'remotehost', 
    PeerPort => '1230', 
    Proto => 'tcp', 
) or die "ERROR in Socket Creation : $!\n"; 


print "TCP Connection Success.\n"; 

# write on the socket to server. 
$data = "this is the data to send"; 
$socket->send($data); 


# read the socket data sent by server. 
$data = <$socket>; 
print "Received from Server : $data\n"; 

sleep(10); 

close($sock); 

我無法使用上述代碼發送和接收來自遠程主機的響應......任何想法?代理與Perl腳本

感謝 阿希什

+3

什麼問題? – 2010-07-23 23:30:02

+1

17號線,恕我直言...... – DVK 2010-07-24 00:38:23

回答

3

當你創建的套接字你宣佈my $sock。再後來,你使用

$socket->send($data) 

這應該是

$sock->send($data) 

後來

$data = <$sock> 
+2

這應該是'嚴格使用; ...'*腳本的其餘部分*'...' – mob 2010-07-24 02:32:22

+0

是的,我意識到,但即使在此之後,我無法得到服務器響應打印出來。 – ashchawla 2010-07-24 03:01:07

+0

服務器是否正常工作?你是否在響應行中將'$ socket'更改爲'$ sock'?在我的測試中,我剛跑過'nc -l 127.0.0.1 1230'。 perl腳本連接併發送了它的消息,然後我在'nc'窗口輸入了回覆,並且perl腳本收到了它。 – mjschultz 2010-07-24 03:20:42

0

當網絡數據時,它宣告你的插座後,要做到這一點是非常有用的:

$sock->autoflush(1);

默認情況下,您的IO被緩衝,並且很可能$data變量小於緩衝區大小。在這種情況下,在將完整緩衝區發送到遠程主機之前,操作系統正在等待更多數據。設置autoflush會禁用緩衝。