gpt4 book ai didi

Perl - 通过套接字发送多个数据

转载 作者:行者123 更新时间:2023-12-03 11:53:15 25 4
gpt4 key购买 nike

当谈到 Perl 中的套接字编程时,我想知道一件事。我正在尝试通过我的套接字发送两个变量。它有效,我可以发送两个,但我想一个接一个地接收它们。让我向您展示我的代码和我得到的输出:

服务器

my $var1 = 200;
chomp($var1);
$socket->send($var1);

my $var2 = 300;
chomp($var2);
$socket->send($var2);

客户
$socket->recv(my $var1, 4000);
chomp($var1);
$socket->recv(my $var2, 4000);
chomp($var2);

print "From server: My height is: $var1 cm, weight is: $var2 kg\n";

好吧,我的预期输出应该是:来自服务器:我的高度是:400 厘米,体重是:300 厘米。
相反,我的输出如下所示:来自服务器:我的高度是:400300 厘米,体重是:

好吧,我不明白为什么我的代码是错误的。我不应该像这样一个接一个地接收数据吗?我最终将如何解决这个问题以正确接收数据?

最佳答案

简短回答:使用数据报套接字或实现分隔不同消息的通信协议(protocol)。

你问:

Shouldnt I be able to receive data one by one like this?



您可以在像 UDP 这样的数据报套接字上轻松做到这一点: IO::Socket::INET->new(Type => SOCK_DGRAM, ...) .写入器/读取器协议(protocol)在那里传输和接收离散的数据包,发送/接收将做你想做的事。

另一方面,像 TCP 这样的流套接字具有连续的字节流模型。在这里,您需要某种记录分隔符或消息大小或类似的初始传输。我怀疑这是你正在使用的。

流套接字与普通文件不同,它们显示为“字节流”IO 句柄。如果一个文件包含字符串“300400”,没有任何换行符,那么该文件的读者怎么会知道这个字符串实际上是两条记录而不是一条(或六或五或不完整的记录等)?

关于Perl - 通过套接字发送多个数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16179243/

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