免费注册 查看新帖 |

Chinaunix

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

LINUX下UDP套接字的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-06 17:09 |只看该作者 |倒序浏览
服务器端
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <semaphore.h>
#include <unistd.h>
#include <pthread.h>

#define PORT 8888
#define MAXSIZE 1024


int main(int argc,char *argv[])
{
   int sockfd;
   char send[MAXSIZE];
   char recv[MAXSIZE];
   socklen_t len;
   struct sockaddr_in saddr,caddr;
   int n=0;

   len=sizeof(saddr);
   bzero(&saddr,sizeof(saddr));
   saddr.sin_family=AF_INET;
   saddr.sin_addr.s_addr=htonl(INADDR_ANY);
   saddr.sin_port=PORT;

   if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0)
   {
     perror("socket error:");
     exit(1);
   }
   if( bind(sockfd,(struct sockaddr *)&saddr,sizeof(saddr) )==-1 )
   {
     perror("bind error:");
     exit(1);
   }
    else
   {
         printf("bind seccuss\n");
    }
   while(1)
   {
     printf("waiting.....\n");
     n=recvfrom(sockfd,recv,MAXSIZE,0,(struct sockaddr*)&caddr,&len);
     printf("n==%d\n",n);
     if(n==-1)
     {
         perror("recv error:");
         exit(1);
     }
     printf("allala");
     printf("recv:%s",recv);
//    sendto(sockfd,send,sizeof(send),0,(struct sockaddr *)&caddr,len) ;
   
           
   }
   exit(0);
}

客户端
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <semaphore.h>
#include <unistd.h>
#include <pthread.h>

#define PORT 8888
#define MAXSIZE 1024


int main(int argc,char *argv[])
{
    struct sockaddr_in saddr;
    int sockfd;
    char send[MAXSIZE];
    socklen_t len;
    char ip_server[]="192.168.1.103";

    len=sizeof(saddr);

     if((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1) /*socket建立*/
    {
        perror("Socket Error");
        exit(1);
    }
    bzero(&saddr,sizeof(saddr));
    saddr.sin_family=AF_INET;
    saddr.sin_port=htons(PORT);
      if(inet_pton(AF_INET,ip_server,&saddr.sin_addr)<=0)
    {
        fprintf(stderr,"IP error\n");
        exit(1);
    }

    while(fgets(send,MAXSIZE,stdin)!=NULL)
    {
        printf("sdas\n");

        if(sendto(sockfd,send,MAXSIZE,0,(struct sockaddr*)&saddr,len)<0) /*根本没有caddr信息*/
        {
            perror("S send error");
            exit(1);
        }
       printf("sdas34\n");

    }


}
现象:客户端发数据,服务器端收不到,客户端加打印后正常
初步断定为服务器端recvfrom这个函数的问题,但是不知道如何修改 ,希望高手指点阿

论坛徽章:
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
2 [报告]
发表于 2010-12-06 17:19 |只看该作者
没打印时客户端发太快了呀,包丢了

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
3 [报告]
发表于 2010-12-06 17:21 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
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
4 [报告]
发表于 2010-12-06 17:24 |只看该作者
兄弟总是这么有耐心看别人的代码
c/unix 发表于 2010-12-06 17:21



    就瞄了两眼,不超过10秒钟{:3_184:}

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-09-11 06:20:00
5 [报告]
发表于 2010-12-06 22:44 |只看该作者
本帖最后由 linuxchyu 于 2010-12-06 22:46 编辑

你确定服务器端的IP 为:192.168.1.103? 太巧了吧,既然和我看的书上的IP一样。

论坛徽章:
0
6 [报告]
发表于 2010-12-07 03:17 |只看该作者
本帖最后由 jerryz920 于 2010-12-07 03:24 编辑

saddr.sin_port=PORT;

    saddr.sin_port=htons(PORT);

明白了?

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
7 [报告]
发表于 2010-12-07 08:36 |只看该作者
saddr.sin_port=PORT;

    saddr.sin_port=htons(PORT);

明白了?
jerryz920 发表于 2010-12-07 03:17



    这晚还在工作阿?佩服。字节序转换漏了……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP