免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2740 | 回复: 5
打印 上一主题 下一主题

udp 收包不正常 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-13 19:34 |只看该作者 |倒序浏览
server代码如下,在linux上运行,如果clinet从同一台机器上发,server可以正常收到,如果从另一台机器上,不管是win还是linux,有时候收不到,有时候发10000个包,就收到1000个。为什么。

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/time.h>

int main(int argc, char* argv[])
{

        int s = socket(AF_INET, SOCK_DGRAM, 0);
        struct sockaddr_in sa;

               struct sockaddr_in addr;
               int addr_len = sizeof(struct sockaddr_in);
               int len;
               fd_set fdset;
               char buf[1024],buffer[1024];
        int nResult;

        if( s < 0 )
        {
               return -1;
        }
               fcntl(s,F_SETFL,O_NONBLOCK);

        sa.sin_family = AF_INET;
        sa.sin_port = htons(9900);
        sa.sin_addr.s_addr = inet_addr("192.168.1.9");
        len = sizeof(sa);
        if(bind(s,(struct sockaddr*)&sa, len) < 0)
        {
                        return -1;
        }

        while(1)
        {

        FD_ZERO(&fdset);
        FD_SET(s,&fdset);

        nResult = select(s + 1,&fdset,NULL,NULL,NULL);

        if(nResult < 0)
        {
              }
        else if(nResult == 0)
        {
                }
        else
        {
            if(FD_ISSET(s, &fdset))
            {
                 recvfrom(s,buf,sizeof(buf),0,&addr,&addr_len);
                }
        }
        }
}

论坛徽章:
0
2 [报告]
发表于 2008-05-13 19:37 |只看该作者
应该是你的Clent端发得太快了.

论坛徽章:
0
3 [报告]
发表于 2008-05-13 23:38 |只看该作者
http://trac.lcuc.org.cn/public/t ... util/socketserver.c

fd_set需要自行添加、清除,看看glibc中的例子代码

论坛徽章:
0
4 [报告]
发表于 2008-05-14 11:37 |只看该作者
代码没问题啊。

论坛徽章:
0
5 [报告]
发表于 2008-05-14 11:57 |只看该作者
fcntl(s,F_SETFL,O_NONBLOCK);
为什么要用非阻塞I/O呢,
如果用非阻塞I/O,
那就不用 select去轮询了,                                             
直接用描述符收,
判断收到的字节数,
大于零就处理,
等于零就继续收

论坛徽章:
0
6 [报告]
发表于 2008-06-21 21:08 |只看该作者
有个问题,楼主如何判断有没有接收到呢?有什么工具没有
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP