接入方式为ADSL,拨通后在CMD下输入 ipconfig 输出如下:
Windows IP ConfigurationEthernet adapter 本地连接:
        Connection-specific DNS Suffix  . : 
        IP Address. . . . . . . . . . . . : 10.0.0.251
        Subnet Mask . . . . . . . . . . . : 255.0.0.0
        Default Gateway . . . . . . . . . : 10.0.0.2PPP adapter ADSL:
        Connection-specific DNS Suffix  . : 
        IP Address. . . . . . . . . . . . : 222.211.157.101
        Subnet Mask . . . . . . . . . . . : 255.255.255.255
        Default Gateway . . . . . . . . . : 222.211.157.101
10.0.0.251 是网卡的IP。
222.211.157.101 是拨号上网后ISP分给我的外网IP。源代码如下: socket(...);             // 创建套接字 SOCKADDR_IN sa;          // SERVER 定址
sa.sin_family      = AF_INET;
sa.sin_addr.s_addr = inet_addr("12.47.46.203");
sa.sin_port        = htons(80);
......

connect(...);
getsockname(......);     // 连接成功后,获取本端地址
TRACE("SOCK CLIENT: GetSockAddr = %s, %d\n", 
inet_ntoa(...), ntohs(sa.sin_port)); getpeername(......);     // 获取另一端的地址
TRACE("SOCK SERVER: getpeername = %s, %d\n", 
inet_ntoa(...), htohs(sa.sin_Port));
调试时,在 DEUBG 窗口中两个 TRACE 语句输出如下:SOCK CLIENT: GetSockAddr = 127.0.0.1, 3579
SOCK SERVER: GetPeerAddr = 127.0.0.1, 7080
我的连接成功了,但为什么本地和远端的IP都是 127.0.0.1 ?然后,我在CMD中输入 netstat -n 输出如下:Active Connections  Proto  Local Address          Foreign Address        State
  TCP    127.0.0.1:3579         127.0.0.1:7080         ESTABLISHED     *
  TCP    127.0.0.1:7080         127.0.0.1:3579         ESTABLISHED     *
  ...
  ......
  TCP    222.211.157.101:3580   12.47.46.203:80        ESTABLISHED     *
我只摘录出了其中三条与本问题有关的 TCP 活动链接。
似乎我的程序从 127.0.0.1:3579 连接到服务器:127.0.0.1:7080
不过我指定的服务器应该是 12.47.46.203:80 ,而连接到这个IP的是本地接口 222.211.157.101:3580 (ADSL MODEN 的IP),请问,这是怎么回事?在正确情况下,我认为两个TRACE语句应该输出:SOCK CLIENT: GetSockAddr = 222.211.157.101, 3580
SOCK SERVER: GetPeerAddr = 12.47.46.203, 80