接入方式为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
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
解决方案 »
- 求助:关于以对话框为框架的问题
- 请问一下我看完《C++入门经典》后看什么书好?
- 注册表编程
- 谁有用SOCKET5实现代理服务器的例子程序?
- CPropertySheet 的用法
- 用Shell_NotifyIcon(NIM_ADD, &m_notifyicon)创建了托盘图标,但当MOuse指在该图标上方时,它便消失了,何解?
- 天女散分:process basename 中文叫什么,进程什么名?
- 在windows里怎样注册ActiveX控件
- 刚学汇编,请教简单问题,很容易拿分的哟,而且马上结账!
- 请问怎么用tab control,还有已经做好的对话框上的按钮放到TAB control上就失效了?
- 请教一个ocx控件方面的问题,急!!我写的一个ocx控件为什么不让我编译注册??老说找不到指定的模块,请大家务必帮忙!!!!!!! 哪
- 关于对话框动态载入位图的问题!
>>所以你的对方IP is your local.真的吗?能不能给一个文章链接,我去看看