通过ADSL联网的两台主机怎么才能相互通信呢?
对于一般的ADSL用户来说,通过ADSL联网都是动态IP,即它们的IP地址是不固定的。当它们联上外网,电信给它一个外网IP地址,当它断开后电信会回收此IP地址。重新联网后,电信会根据剩余的IP地址列表给出一个新的外网IP地址。
在socket通信中,我们都是通过"IP,port"来通信的。为了获得通信主机的实时外网IP地址,我们可以采用动态域名的方式来解决。动态域名的绑定,这里就不在详述了。网上例程很多,而且这也不是本文的重点。以花生壳为例,当通信的主机装上花生壳客户端后,并通过客户端绑定好了动态域名。比如我的动态域名是cloud95.xicp.net, 这时我们通信的客户端可采用以下方式,获得通信主机IP。
WSADATA wsaData;
WSAStartup(0x0202, &wsaData); //初始化套接字库
hostent* host= gethostbyname("cloud95.xicp.net");
char* pszIP= (char*)inet_ntoa(*(struct in_addr*)(host->h_addr));
pszIP中就是通信主机的IP地址。如果你的主机是通过路由器联上外网的,那么你还需要在路由器上设置一下端口映射。将你的本机通信端口A映射为外网端口B。socket通信时,就可以用"pszIP,B"来通信了。