Perl - 通过套接字发送多个数据
问题描述:
有一件事我很想知道什么时候在Perl中进行套接字编程。我正尝试通过我的套接字发送两个变体。它的工作原理,我可以发送,但我希望一个接一个。让我告诉你我的代码和输出我得到:Perl - 通过套接字发送多个数据
服务器
my $var1 = 200;
chomp($var1);
$socket->send($var1);
my $var2 = 300;
chomp($var2);
$socket->send($var2);
CLIENT
$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厘米。相反,我的输出如下所示:From server:My height is:400300 cm,weight is:
嗯,我看不出为什么我的代码是错误的。我应该能够像这样一个一个地接收数据吗?我如何最终解决这个问题以正确接收数据?
答
简短回答:使用数据报套接字或实现划分不同消息的通信协议。
你问:
不应该我能够通过一个这样的接收数据吗?
你可以做到这一点很容易在数据报套接字如UDP:IO::Socket::INET->new(Type => SOCK_DGRAM, ...)
。那里的作家/读者协议是发送和接收离散的数据包,并发送/ recv将做你想做的。
流另一方面,TCP这样的套接字具有连续的字节流模型。在这里您需要某种记录分隔符或消息大小或类似的初始传输。我怀疑这是你正在使用的。
流套接字与普通文件不同,它显示为“bytestream”IO句柄。如果一个文件包含字符串“300400”,而没有任何换行,该文件的读者如何知道该字符串实际上是两条记录而不是一条(或六条或五条或不完整的记录等)?
在你的变量之间插入一些分隔符,并在接收端分割它 – perreal 2013-04-23 21:17:53