gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:49:25 25 4
gpt4 key购买 nike

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

我有一个服务器(某种 LPT 端口到 TCP/IP 代理),它会自动尝试以随机间隔建立连接。我需要监听特定端口并与服务器通信。那就是客户端。它适用于 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

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

最佳答案

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

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

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

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

$/ = "\r";

关于perl tcp 客户端不显示传入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15163778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com