我是网络编程的新手,无法解决这个问题
我有一台服务器(某种到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
我不知道我做错了什么...更复杂的例子对我不起作用,因为我不知道如何调试它们......
答案 0 :(得分:2)
<$new_sock>
,readline($new_sock)
的缩写,仅在收到完整行后返回,也就是说收到换行时。
sysread
就会返回,因此您可以使用它。
my $rv = sysread($new_sock, my $buf, 64*1024);
或者,由于您收到的行以回车结束,您可以将其传达给Perl。
$/ = "\r";