请教一个问题: c++ winsock connect()方法 会发3步握手的包,假如我一个网卡最先有一个地址,后来我又在高级里面手动加了2个地址 比如最先网卡地址是192。168。2。11 ,后来我又加了 192。168。2。12 和192。168。2。13这2个地址给这个网卡,这样这个网卡就有3个地址了 但是我发现每次connect()发包都是通过192。168。2。11这个地址出去的。 但是我用 gethostbyname 里面的h_addr_list[i]只能得出这3个地址,得不到优先级 请问那connect()怎么知道哪个地址才是发包的地址呢?如何用程序得出这个地址呢? 如何才能让我的程序得出,哪个是真正用的connect()用的地址呢 也就是说如何才能知道 h_addr_list[i] 里面的3个地址中 192。168。2。11 才是 发包的源地址呢 谢谢大家 肯定 多多給分
struct sockaddr_in sockadd;
int FAR namelen = sizeof(struct sockaddr_in);
getsockname(m_hSocket, (struct sockaddr *)&sockadd, &namelen);
strcpy(strIP, inet_ntoa(sockadd.sin_addr));
在connect之后使用上面的语句在客户端就能在strIP中得到实际使用的IP
struct hostent *hp;
addr.sin_family=AF_INET;
addr.sin_port=htons(port);
hp=gethostbyname("localhost");
memcpy((char *)&addr.sin_addr,(char *)hp->h_addr,hp->h_length); h_addr是h_addr[0]
SOCKET accept (
SOCKET s,
struct sockaddr FAR* addr,
int FAR* addrlen
);
在addr里就会有这次通讯的地址了,发个包回来不就知道了?