zoukankan      html  css  js  c++  java
  • socket编程bind浮动ip

               正常情况下一个网卡对应一个ip,在进行socke客户端编程时,如果不调用bind方法则默认客户端绑定本机第一块网卡的ip。如果我们想用第二个ip来和服务器进行socket通信则需调用bind方法,并在传入sockaddr_in的结构体中指定端口和ip。

        在linux服务器上进行测试,服务器网卡的ip是192.168.8.122,我新增一个虚拟ip:192.168.8.133(linux命令:ifconfig eth0:1 192.168.8.133 netmask 255.255.255.0

    代码:

    #include <stdio.h>
    #include <netinet/in.h>
    #include <sys/types.h>
    #include <sys/socket.h>  
    #include <errno.h>
    #include <string.h>

    #define CLIENT_IP_DEF "192.168.8.133"           //客户端绑定的ip
    #define SERVER_IP_DEF "192.168.8.108"           //连接服务端的ip
    #define CLIENT_PORT_DEF 11211                        //客户端绑定的端口
    #define SERVER_PORT_DEF 8899                        //服务端绑定的端口

    int main(int argc, char *argv[])
    {
            int     socket_id;
            struct  sockaddr_in server_addr,client_addr;
            
            memset(&server_addr, 0, sizeof(server_addr));
            memset(&client_addr, 0, sizeof(client_addr));
            
            client_addr.sin_port = htons(CLIENT_PORT_DEF);
            client_addr.sin_family = AF_INET;
            client_addr.sin_addr.s_addr = inet_addr(CLIENT_IP_DEF);
           
            server_addr.sin_port = htons(SERVER_PORT_DEF);
            server_addr.sin_family = AF_INET;
            server_addr.sin_addr.s_addr = inet_addr(SERVER_IP_DEF);
        
            if ((socket_id = socket(AF_INET, SOCK_STREAM, 0)) < 0)
            {
                    printf("create socket error,err:[%d](%s)", errno, strerror(errno));
                    return -1;
            }


       /***这里可以省略掉,则绑定到192.168.8.122ip上,端口随机分配***/
             if(bind(socket_id,(struct sockaddr *)&client_addr,
                    sizeof(client_addr)) <0)
             {
                  printf("bind socket error, err:[%d](%s)", errno, strerror(errno));
                   return -1;
             }
          /********************/


            if( connect(socket_id, (struct sockaddr *)&server_addr,
                    sizeof(server_addr)) < 0 )
            {
                    printf("connect error,err:[%d](%s)", errno, strerror(errno));
                    return -1;
            }
            
            while(1);
            
            close(socket_id);
    }

      

    绑定后连接服务端结果结果:

  • 相关阅读:
    移动MM首届手机软件设计及创意大赛决赛取得圆满成功
    Windows Phone 7 EKB系列文章发布
    EVC3/4项目升级到Visual Studio项目的一些建议
    Windows Phone SDK 7.1 RTM 发布
    Howto: 创建Windows Phone 7自定义控件
    风云再起,7迹由你WP7技术沙龙上海站第二次活动
    Windows Phone Dev Notes如何使用ConnectionSettingsTask 来启动连接设置页面
    【OneNote Mobile】 如何处理便签内容的格式?
    《101 Windows Phone 7 Apps》读书笔记PASSWORDS & SECRETS
    3年MVP路,一颗感恩的心
  • 原文地址:https://www.cnblogs.com/samurail/p/3069377.html
Copyright © 2011-2022 走看看