套接字客户端,导入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?