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

时间:2013-04-23 21:10:32

标签: perl sockets

对于Perl中的套接字编程,有一件事我想知道。我正试图通过我的插座发送两个变量。它有效,我可以发送两个,但我想逐个接收它们。让我告诉你我的代码和我得到的输出:

SERVER

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厘米,重量是:

好吧,我看不出为什么我的代码错了。难道我不能像这样一个接一个地收到数据吗?我最终如何解决此问题才能正确接收数据?

1 个答案:

答案 0 :(得分:2)

简答:使用数据报套接字或实现划分不同消息的通信协议。

你问:

  

我不能像这样一个接一个地接收数据吗?

您可以在UDP:IO::Socket::INET->new(Type => SOCK_DGRAM, ...)数据报套接字上轻松完成此操作。编写器/读卡器协议正在发送和接收离散的数据包,发送/接收将执行您想要的操作。

另一方面,

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

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