免费注册 查看新帖 |

Chinaunix

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

为什么收不到数据呢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-17 08:24 |只看该作者 |倒序浏览
10可用积分
void udpc_requ(int sockfd,const struct sockaddr_in *addr,int len)
{
        char buffer[MAX_BUF_SIZE];
        bzero(buffer,MAX_BUF_SIZE);
        int n;
        while(1)        
        {      
               /* fgets(buffer,MAX_BUF_SIZE,stdin);
               
                sendto(sockfd,buffer,strlen(buffer)+1,0,(struct sockaddr*)addr,len);
                bzero(buffer,MAX_BUF_SIZE);
                */
               n=recvfrom(sockfd,buffer,MAX_BUF_SIZE,0,(struct sockaddr *)&addr,
                        (socklen_t*)&len);
                if (n < 0)
                    continue;
                buffer[n]=0;
               
                fputs(buffer,stdout);
        }
}

int main(int argc,char **argv)
{
        int sockfd,port;
        struct sockaddr_in      addr;
        
        if(argc!=3)
        {
                fprintf(stderr,"Usage:%s server_ip server_port\n",argv[0]);
                exit(1);
        }
        
        if((port=atoi(argv[2]))<0)
        {
                fprintf(stderr,"Usage:%s server_ip server_port\n",argv[0]);
                exit(1);
        }
        
        sockfd=socket(AF_INET,SOCK_DGRAM,0);
        if(sockfd<0)
        {
                fprintf(stderr,"Socket  Error:%s\n",strerror(errno));
                exit(1);
        }      
        /*填充服务器端的资料*/
        bzero(&addr,sizeof(struct sockaddr_in));
        addr.sin_family=AF_INET;
        addr.sin_port=htons(port);
        if(inet_aton(argv[1],&addr.sin_addr)<0)
        {
                fprintf(stderr,"Ip error:%s\n",strerror(errno));
                exit(1);
        }
        udpc_requ(sockfd,&addr,sizeof(struct sockaddr_in));
        close(sockfd);
}
我肯定ip和端口没问题,而且数据确实那边有发,但就是收不到,为什么呢?

论坛徽章:
0
2 [报告]
发表于 2009-07-17 09:45 |只看该作者
而且很奇怪,用gcc编译失败,而用g++却成功,这个明显是c程序吧

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
3 [报告]
发表于 2009-07-17 09:53 |只看该作者
C要求变量定义在代码之前,象这样

     bzero(buffer,MAX_BUF_SIZE);
        int n;

是不行的

论坛徽章:
0
4 [报告]
发表于 2009-07-17 09:58 |只看该作者
难道只能sendto,不能recvfrom?

论坛徽章:
0
5 [报告]
发表于 2009-07-17 10:00 |只看该作者

回复 #3 hellioncu 的帖子

所以gcc不行. 那为什么不能收数据呢?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
6 [报告]
发表于 2009-07-17 10:02 |只看该作者
你看看代码是否阻塞在recvfrom,如果是,那么应该是确实没有数据发送过来,否则perror看什么错误

论坛徽章:
0
7 [报告]
发表于 2009-07-17 10:07 |只看该作者

回复 #3 hellioncu 的帖子

不对,不是这么问题

论坛徽章:
0
8 [报告]
发表于 2009-07-17 10:12 |只看该作者
一直阻塞在recvfrom ,而且我把防火墙也关了.我用其他程序可以接收数据

论坛徽章:
0
9 [报告]
发表于 2009-07-17 16:09 |只看该作者

回复 #1 fengqd 的帖子

没有bind。
设置的端口没起作用。

论坛徽章:
0
10 [报告]
发表于 2009-07-23 16:37 |只看该作者
原帖由 hellioncu 于 2009-7-17 09:53 发表
C要求变量定义在代码之前,象这样

     bzero(buffer,MAX_BUF_SIZE);
        int n;

是不行的

你规定的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP