免费注册 查看新帖 |

Chinaunix

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

[网络管理] [求助] socket 通信问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-08 11:30 |只看该作者 |倒序浏览
通信问题,客户端与服务器端的socket通信问题,程序可以编译通过但是不能实现通信,希望各位大虾指导:

服务器端程序:
#define PORT 8000
#define MAX_SIZE 10

main()
{
        int sockfd , len ;
        struct sockaddr_in addr ;
        int addr_len = sizeof(struct sockaddr_in) ;
        char buffer[MAX_SIZE] ;
       

        if((sockfd = socket(AF_INET , SOCK_DGRAM, 0))<0)
        {
                perror("socket") ;
                exit(1) ;
        }

        bzero(&addr , sizeof(addr)) ;
        addr.sin_family = AF_INET ;
        addr.sin_port = htons(PORT) ;
        addr.sin_addr.s_addr = htonl(INADDR_ANY) ;
        if(bind(sockfd , (struct sockaddr*)&addr , sizeof(addr))< 0)
        {
                perror("connect") ;
                exit(1) ;
        }
        while(1)
        {
                bzero(buffer , sizeof(buffer)) ;
                printf(".\n") ;
              len = recvfrom(sockfd , buffer , sizeof(buffer) ,  0 , (struct sockaddr*)&addr ,                                          (socklen_t *)&addr_len) ;
                printf("..\n") ;
                printf("receive from %s\n" , inet_ntoa(addr.sin_addr)) ;

                sendto(sockfd , buffer , len , 0 , (struct sockaddr*)&addr , addr_len) ;
        }
}

客户端程序:

#define PORT 8000
#define SERVER_IP "127.0.0.1"
#define MAX_SIZE 10




main()

{

        int s , len;
        int t ;

        struct sockaddr_in  addr;
        int addr_len = sizeof(struct sockaddr_in) ;

        char buffer[MAX_SIZE] ;
        if((s = socket(AF_INET , SOCK_DGRAM , 0)) < 0)
        {
                perror("socket");
                exit(1);
        }

        bzero(&addr , sizeof(addr)) ;
        addr.sin_family = AF_INET ;
        addr.sin_port = htons(PORT) ;
        addr.sin_addr.s_addr = inet_addr(SERVER_IP) ;
       
        while(1)
        {
                bzero(&addr , sizeof(addr)) ;
                len = read(STDIN_FILENO , buffer , sizeof(buffer)) ;
                printf(".\n") ;

                sendto(s , buffer , len , 0 , (struct sockaddr*)&addr , addr_len) ;
                printf("..\n") ;

                len = recvfrom(s , buffer , sizeof(buffer) , 0 , (struct sockaddr*)&addr ,
                           (socklen_t *)&addr_len ) ;
                printf("...\n") ;
                printf("receive %s" , buffer) ;
        }
}

论坛徽章:
0
2 [报告]
发表于 2007-05-08 17:31 |只看该作者
1.头文件也不给,还让我自己找

  1. #include <sys/types.h>                                                                           
  2. #include <sys/socket.h>                                                                          
  3. #include <stdio.h>                                                                              
  4. #include <linux/in.h>                                                                           
  5. #include <unistd.h>                                                                              
  6. #include <errno.h>
复制代码


2.strace 一下你的client
sendto参数中地址有问题,检查代码发现  
bzero(&addr , sizeof(addr)) ;
用的不对,把服务器地址给冲了
再定义一个addr2吧

  1. main()

  2. {

  3.         int s , len;
  4.         int t ;

  5.         struct sockaddr_in  addr,addr2;//<<<<<<<<
  6.         int addr_len = sizeof(struct sockaddr_in) ;

  7.         char buffer[MAX_SIZE] ;
  8.         if((s = socket(AF_INET , SOCK_DGRAM , 0)) < 0)
  9.         {
  10.                 perror("socket");
  11.                 exit(1);
  12.         }

  13.         bzero(&addr , sizeof(addr)) ;
  14.         addr.sin_family = AF_INET ;
  15.         addr.sin_port = htons(PORT) ;
  16.         addr.sin_addr.s_addr = inet_addr(SERVER_IP) ;
  17.         
  18.         while(1)
  19.         {
  20.                // bzero(&addr , sizeof(addr)) ;<<<<error

  21.                 len = read(STDIN_FILENO , buffer , sizeof(buffer)) ;
  22.                 printf(".\n") ;

  23.                 sendto(s , buffer , len , 0 , (struct sockaddr*)&addr , addr_len) ;
  24.                 printf("..\n") ;

  25.                 bzero(&addr2 , sizeof(addr2)) ;//<<<<<

  26.                 len = recvfrom(s , buffer , sizeof(buffer) , 0 , (struct sockaddr*)&addr2 ,
  27.                            (socklen_t *)&addr_len ) ;
  28.                 printf("...\n") ;
  29.                 printf("receive %s" , buffer) ;
  30.         }
  31. }

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP