perl tcp客户端不显示传入数据

时间:2013-03-01 17:45:29

标签: perl sockets tcp

我是网络编程的新手,无法解决这个问题

我有一台服务器(某种到TCP / IP代理的LPT端口),它会自动尝试以随机间隔建立连接。我需要侦听特定端口并与服务器通信。那是客户。它适用于perl tcp服务器..但在这种情况下,它等待......没有任何反应

#!/usr/bin/perl -w
use IO::Socket;
my $sock = new IO::Socket::INET(
    LocalHost => '192.168.1.1',
    LocalPort => '7000',
    Proto     => 'tcp',
    Listen    => 1,
    Reuse     => 1,
);
die "Could not create socket: $!\n" unless $sock;
my $new_sock = $sock->accept();
while (<$new_sock>) {
    print $_;
}
close($sock);

它适用于我的简单tcp服务器,但是这个“黑盒子” - 禁止 在客户端计算机上有两个连接:

tcp        0      0 192.168.1.1:7000      0.0.0.0:*               LISTEN     
tcp        0      0 192.168.1.1:7000      192.168.1.2:33822     ESTABLISHED

但如果我尝试

nc -l 192.168.1.1 7000

它像魅力一样,数据流动。并且只存在一个连接(如第二个连接)

在客户端捕获的一个符号传输的tcpdump片段。似乎没问题

21:42:00.242172 IP (tos 0x0, ttl 64, id 30448, offset 0, flags [DF], proto TCP (6), length 53)
192.168.1.2.33837 > 192.168.1.1.7000: Flags [P.], cksum 0x5646 (correct), seq 3592562130:3592562131, ack 1351632513, win 92, options [nop,nop,TS val 140364552 ecr 92554083], length 1

我不知道我做错了什么...更复杂的例子对我不起作用,因为我不知道如何调试它们......

1 个答案:

答案 0 :(得分:2)

<$new_sock>readline($new_sock)的缩写,仅在收到完整行后返回,也就是说收到换行时。

只要数据可用,

sysread就会返回,因此您可以使用它。

my $rv = sysread($new_sock, my $buf, 64*1024);

或者,由于您收到的行以回车结束,您可以将其传达给Perl。

$/ = "\r";