Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl tcp客户端不显示传入数据_Perl_Sockets_Tcp - Fatal编程技术网

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

perl tcp客户端不显示传入数据,perl,sockets,tcp,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 =>

我对网络编程一无所知,无法解决这个问题

我有一个服务器(某种到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);
但是如果我试着

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
我不知道我做错了什么。。。更复杂的例子不适合我,因为我不知道如何调试它们

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

sysread
将在数据可用时立即返回,因此您可以使用它

my $rv = sysread($new_sock, my $buf, 64*1024);
或者,由于接收到的行以回车结束,因此可以将其与Perl通信

$/ = "\r";

遭受缓冲?如果添加
$|=1?顺便说一句,没有两个连接。只有第二个连接。有一个监听服务器套接字(
$sock
)和一个连接的客户端套接字(
$new\u sock
),这两个套接字都很好。$|=1;使用后添加。。。我没有做这个把戏。。。服务器正在发送ascii字符。。。应该可以工作…客户端是否正在发送换行符(0x0A)<代码>
只有收到一个才会返回。不,只有CR。有什么办法可以避免吗?目前我无法模仿0x0a。我想通过它发送数据,而不仅仅是ASCII。每个包装都必须进行LF终止?非常感谢这个解决方案!我想指出的是,将任何变更的范围限制在以下方面是一个好主意:。
$/ = "\r";