Windows Socket:使用ws2_32.dll无法连接

时间:2014-06-12 10:32:40

标签: sockets tcp

套接字客户端,导入ws2_32以连接到等待(localhost)SocketServer:

 conn_socket = socket(AF_INET, socket_type, 0); // ok conn_socket = 1132
 Print("Client: Client connecting to: "+ server_addr+" => "+(string)conn_socket,
           " AddrLen: ",(string)(ArraySize(server)<<2));
 Print("serv[]: ",(string)server[0]," ",(string)server[1]," ",(string)server[2]," ",
          (string)server[3]," ",(string)server[4]);
 retval=connect(conn_socket, server, ArraySize(server)<<2); // this fails

打印出来:

 Client: Client connecting to: 127.0.0.1 => 1872 AddrLen: 20
 serv[]: -687407102 0 0 0 0

错误:

 Error 10049 means: WSAEADDRNOTAVAIL Cannot assign requested address.

可能是我有Win 7.64,但这个功能只适用于32位吗?

  // addr[0] = 0
  // port = 2007
  int2arr(server,sin_addr,addr[0]);
  int2arr(server,sin_family,AF_INET);
  int2arr(server,sin_port,htons(port));

void int2arr(int& arr[], int field, int value) {
    if (field<0) field=-field;
    int l=field>>16;
    if (l==0) return; //(0);
    if (l>4) l=4;
    field&=0xFFFF;
    int p=field>>2;
    int o=field%4;
    value&=0xFFFFFFFF>>((4-l)<<3);
    arr[p]&=0xFFFFFFFF>>((4-o)<<3);
    arr[p]|=value<<(o<<3);
    if (o+l>4){
        p++;
        arr[p]&=0xFFFFFFFF<<((o+l-4)<<3);
        arr[p]|=value>>((8-o-l)<<3);
    }
}
int htons(int s) {
    if (WS_BIGENDIAN!=0) return(s);
    return(((s&0xFF)<<8) | ((s&0xFF00)>>8));
}

在这种情况下我该怎么做? 应该如何看起来像服务器[0]条目?其实是有-687407102
并应连接到端口2007的localhost(120.0.0.1)上的SocketServer?

0 个答案:

没有答案