免费注册 查看新帖 |

Chinaunix

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

在同一台机器上,socket连接总是被拒绝,请大家看看为什么?谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-27 09:54 |只看该作者 |倒序浏览
server.c
=======================================
int port = 8800;

int main(void)
{
     struct sockaddr_in sock_addr_send ;
     struct sockaddr_in sock_addr_rece ;
     int mysock;
     int tempsock;

     int addrsize;
     char str[100],str1[20],str2[20],str3[20] ;
     char buf[100]={"i have received the info "};
     int i ,len1,len2;
     float c;


// 建立socket
     mysock = socket(AF_INET,SOCK_STREAM,0);
     if(mysock<0)
     {
        perror("create socket failed ......");
        exit(1);
     }

// 建立本机IP地址
    bzero(&sock_addr_send,sizeof(sock_addr_send));
      sock_addr_send.sin_family = AF_INET;
    // sock_addr_send.sin_addr.s_addr = htonl(INADDR_ANY);
     sock_addr_send.sin_addr.s_addr = inet_addr("127.0.0.1");
     sock_addr_send.sin_port = htonl(port);

// 绑定socket
     if(bind(mysock,(struct sockaddr*)&sock_addr_send,sizeof(sock_addr_send))<0)
      {
         perror("bind error ......");
         exit(1);
      }


// 监听client
     if(listen(mysock,10)<0)
       {
           perror("listen failed ......");
           exit(1);
       }

     printf("waiting connecting .....................................\n");


     while(1)
       {
            tempsock = accept(mysock,(struct sockaddr*)&sock_addr_rece,&addrsize);
            if(tempsock<0)
             {
                  perror("tempsock failed ......");
                  exit(1);
              }

        len1= recv(tempsock,str,100,0);
        printf("收到的字节数目: %d\n",len1);
        str[len1] = '\0';
        printf("收到的字符串是: %s\n",str);


        len2 = strlen(buf);
        if(send(tempsock,buf,len2,0)<0)
          {
               perror("send info failed......");
               exit(1);
          }


         close(tempsock);
    }

return 0;

}


===============================================
client.c

int port = 8800;


int main (void)
{
         struct sockaddr_in pin;
         int mysock;
         char buf[8192];
         char* str = "i want connect server ......";

         bzero(&pin, sizeof(pin));

         pin.sin_family = AF_INET;
      // pin.sin_addr.s_addr = htonl(INADDR_ANY);
         pin.sin_addr.s_addr = inet_addr("127.0.0.1");
         pin.sin_port = htons(port);

        mysock = socket(AF_INET,SOCK_STREAM,0);
        if(mysock<0)
          {
              perror("socket failed ......");
              exit(1);
          }


         if(connect(mysock,(struct sockaddr *)&pin,sizeof(pin))<0)
            {
               perror("connect failed .....");
               exit(1);
             }


         printf("send message to server : %s \n",str);

         if(send(mysock,str,strlen(str),0)<0)
             {
                   perror("send failed.....");
                   exit(1);
             }


          if(recv(mysock,buf,8192,0)<0)
             {
                 perror("recv failed .....");
                 exit(1);
             }


         printf("recv message from server : %s \n",buf);


          close(mysock);

         return 0;
}

论坛徽章:
0
2 [报告]
发表于 2009-10-27 15:10 |只看该作者
你看看lo是不是127.0.0.1这个IP,不要用 inet_addr这个函数有问题的!用inet_aton这个函数吧
sock_addr_send.sin_addr.s_addr = htonl(INADDR_ANY);
这句就已经可以了!主要你看看lo是不是127.0.0.1!要是不是这个IP,你的client连接就出问题了!

[ 本帖最后由 raygtr 于 2009-10-27 15:14 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-10-28 16:53 |只看该作者
在while(1)前面加一句
addrsize = sizeof(sock_addr_rece);
试试

论坛徽章:
0
4 [报告]
发表于 2009-10-29 09:38 |只看该作者
发现问题了
是因为htonl(port)
thanks all

论坛徽章:
0
5 [报告]
发表于 2009-10-30 14:34 |只看该作者
问一下:是不是由于port是16位的你却用的htonl位数变长了,端口发生了变化?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP