c - Perl TCP 套接字编程 vs C recv() 函数。我需要跟踪收到的字节数吗?

标签 c perl sockets tcp

我熟悉 C 语言的 TCP/IP 编程,但对 Perl 有点陌生。在 C 中,您需要围绕 recv() 语句编写一个循环,因为您不能保证在一个 recv() 语句中从远程服务器获取所有数据。

while(Size != 0)
 {
  Status = recv(Socket, Buffer, Size, 0);
   Buffer = Buffer + Status;
   Size = Size - Status;
  }

我在 Perl 中看到的几乎所有示例都显示只打印从套接字获得的内容,而没有跟踪接收到的字节。

my $new_sock=$sock->accept();
while(<$new_sock>)
 {
  print "$_\n";
 }
 close($sock);

那么,Perl 是否以某种方式确保您获得所有数据而无需计算字节数?

如果答案是否定的,有人可以给我指出一个 Perl TCP 代码的示例,它确实像我上面的 C 示例一样保持跟踪吗?

最佳答案

< > (readline 函数)级别相当高,非常方便。

IO::Socket支持 recv方法。

作为IO::Socket继承自 IO::Handle您可能还对 read 感兴趣或 sysread密切模拟您正在寻找的低级 C 接口(interface)的方法...

关于c - Perl TCP 套接字编程 vs C recv() 函数。我需要跟踪收到的字节数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23204873/

相关文章:

C++ strlen(ch) 和 sizeof(ch) strlen

c - 何时转换 size_t

c - C 上的环形缓冲区

python相当于perl的qw()

arrays - 如何在 Perl 中将多个数组传递给 'foreach' 循环?

java - 如何删除/重新启动到不稳定套接字服务器的客户端连接

java - TCP-服务器不会打印/接收来自远程客户端的数据

通过套接字发送字符串时 Java 流损坏

您可以使用 LD_PRELOAD 更改结构吗

python - 正则表达式中重复限定符被忽略