Sock_startup();
   SOCKET  sock_main,sock_acc;
   struct sockaddr_in  sockAddrIn;
   struct sockaddr sa;
   
   sock_main=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
   sockAddrIn.sin_family=AF_INET;
   sockAddrIn.sin_addr.S_un.S_addr=inet_addr("192.168.3.68");
   sockAddrIn.sin_port=htons(6000);
   
   sa=(struct sockaddr)sockAddrIn;调试时显示:
error C2440: 'type cast' : cannot convert from 'struct sockaddr_in' to 'struct sockaddr'

解决方案 »

  1.   

    sa=(struct sockaddr)sockAddrIn; 
    struct sockaddr_in   struct sockaddr 贴一下
      

  2.   

    sa=(struct sockaddr *)&sockAddrIn; 
      

  3.   

    sa=*(struct sockaddr *)&sockAddrIn; 
      

  4.   

    struct sockaddr {
       unsigned short sa_family;
       char sa_data[14];
    };
    struct sockaddr_in{
       short sin_family;
       unsigned short sin_port;
       struct in_addr sin_addr;
       char sin_zero[8];
    };
    虽然说这两个结构体占的内存大小是一样的,但结构体内的成员变量不一样,不能直接赋值。
    1.sa=*((struct sockaddr *)&sockAddrIn);
    2.memcpy(&sa,&sockAddrIn,sizeof(struct sockaddr));