gpt4 book ai didi

perl socket编程连续写入socket后的问题

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

我正在使用 IO::Socket::INET像这样创建套接字:

$lsn1 = IO::Socket::INET->new(
PeerAddr => '192.168.0.2',
PeerPort => 1850,
Proto => 'tcp',
Type => SOCK_STREAM
) || die "Can't connect to 192.168.0.2:1850 : $!\n";

$lsn2 = IO::Socket::INET->new(
PeerAddr => '192.168.0.2',
PeerPort = >1852,
Proto => 'tcp',
Type => SOCK_STREAM
) || die "Can't connect to 192.168.0.2:1852 : $!\n";

然后,我想在两个套接字上读写数据,所以顺序是:

1. $lsn1->print(msg1);  send message 1 to server from $lsn1.
2. $line = <$lsn2>; receive message 2 from server from $lsn2.
3. $lsn2->print(msg3); send message 3 to server from $lsn2.
4. $lsn2->print(msg4); send message 4 to server from $lsn2.
5. $line = <$lsn2>; receive message 5 from server. But it is all zeros! However I can
see the data on wireshark.

一切都很好,直到第 5 步。服务器端收到我的消息 4 并发回后应该由 $line = <$lsn2> 捕获的 msg5 ,而不是捕获有意义的值,它捕获所有 0'。我使用 wireshark 查看发生了什么,在服务器向我发送 msg5 后从我这边发送了一个 RST ACK。

服务器中的一个函数收到 msg4 并立即发回 msg5。如果我在该函数中去掉了 msg4 的发送,那么发送 msg5 之后的是 FIN ACK .

谁能告诉我为什么RST ACK正在发生?一个 perl 脚本可以打开两个套接字并像我一样读写。

最佳答案

您可能没有完全阅读消息 2,在套接字上留下了一些数据(换行符、空字符等)。当您随后尝试读取消息 5 时,您改为读取此数据,并且您的程序在服务器实际发送消息 5 之前终止。

关于perl socket编程连续写入socket后的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1876497/

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