2010-07-23 61 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会禁用缓冲。