recvfrom() 不返回接收到的字节数

Posted

技术标签:

【中文标题】recvfrom() 不返回接收到的字节数【英文标题】:recvfrom() not returning number of bytes received 【发布时间】:2013-02-25 00:03:22 【问题描述】:

这是一个关于在 c++ 中使用 recvfrom() 的非常基本的问题(希望如此)。

我正在实现一个非常基本的 UDP 函数,它发送一条消息,然后接收一条字符消息作为回报。当我调用 recvfrom() 时,我得到了相应的消息,但该函数不返回接收到的字节数(字符)。相反,它返回 0。 sn-p:

sendto(sock, "10000;1;Chris\0", 14, 0, 
   (struct sockaddr FAR *) &sin, sizeof(sin));

if(nchars = recvfrom(sock, buf, LINELEN, 0, NULL, NULL) < 0)
    errexit("recvfrom failed: error %d\n", GetLastError());
buf[nchars] = '\0';

我的返回消息需要附加一个空字符,但 nchars 一直返回为 0,这使得这很困难。任何想法为什么 recvfrom() 不会返回接收到的字节数?

【问题讨论】:

当然,如果recvfrom 返回零,您实际上并没有收到任何东西。我非常怀疑recvfrom 是否以如此根本的方式被破坏 - 毕竟,它很可能是您的浏览器用来查看此页面的内容...... 【参考方案1】:

检查 if 语句中的运算符优先级。 你想要的是

if ((nchars = recvfrom(sock, buf, LINELEN, 0, NULL, NULL)) < 0)

我猜是开心的捂脸。 :)

【讨论】:

以上是关于recvfrom() 不返回接收到的字节数的主要内容,如果未能解决你的问题,请参考以下文章

UDP和套接字,recvfrom()返回-1,资源暂时不可用

基于UDP的服务端编程

Linux命令之统计文件字数字符数字节数及行数信息wc

终端通过GPRS发送UDP数据到固定IP:端口号,socket recvfrom接收不到数据,但却有返回值,如何解决

【奇】udp的recvfrom

Windows 上没有从 recvfrom 收到任何内容