郝璐璐整容前后:如何用VB编程实现异地局域网内部主机之间的通讯,类似QQ的即时通讯软件一样

来源:百度文库 编辑:高校问答 时间:2024/04/24 08:51:00
因为我用Winsock控件使用TCP协议开发通讯软件时,监听的IP地址是路由器自动分配的,目前可是实现异地拥有公共IP地址的主机之间的数据连接,但如果是在内网中的主机由于路由器自动分配了IP地址,对局域网内部的主机隐藏了外网IP,这样本地主机无法监听到远程主机对自己的连接请求了。怎么办?QQ是如何做到的?具体情况如下:
我用Winsock控件编写了一个聊天程序,使用TCP方式。想在两个宿舍间进行调试。
网络架构:我宿舍(HOME)使用ADSL宽带,并启动了路由功能,DHCP自动给宿舍4台电脑分配IP地址分别是192.168.0.1~192.168.0.4,在这里设它们对应的电脑为H1,H2,H3,H4。隔壁宿舍(NEIGHBOR)配置同我宿舍也是四台电脑192.168.0.1~192.168.0.4,设他们对应的电脑为N1,N2,N3,N4。
现在HOME和NEIGHBOR上网后,互相告知对方外网IP地址设我的外网IP为HIP,隔壁的外网IP为NIP。
由于是通过路由,所以我宿舍的4台电脑H1~H4共有一个HIP,隔壁宿舍4台电脑N1~N4共用一个NIP,现在我想用我的电脑H4给对方N2发送一条消息可是我这边所能知道的只是对方的公网IP地址,由于ADSL路由功能自动给每台主机分配了IP,所以对于局域网内的各台主机都只显示内网IP而隐藏了外网IP,所以对方根本无法监听到我的连接请求。
我就想做到QQ这样,无需知道主机目前处于什么样的网络中,也不管是否有独立公共IP,都可以进行数据传输。

这个聊天程序,楼主准备用面向连接的TCP来实现啊?
为什么不用效率更高的UDP呢?

TCP连接得经历三次握手,这样,通讯过程中,得耗费很多资源的啊。
还有其时效性(或者叫即时性!?)也不如UDP。

QQ早期就是使用UDP的。

另外,我想楼主误会了QQ的工作原理吧。

以前QQ服务器不是曾经遭受攻击嘛?服务器瘫了,以至于QQ不能登陆,因此可以看出来,QQ客户端是登陆到服务器的,而不是很多的客户端自己进行简单的联系。

如果用这样的方法就好办了。
客户端——
tcpClient.RemoteHost = XXX.XXX.XXX.XXX
tcpClient.Connect

服务器端——
tcpServer.LocalPort = 1999
tcpServer.Listen
tcpServer.Accept requestID
……
tcpServer.GetData strData
……
tcpServer.SendData strData
……

……

如果像楼主所说那样两个局域网内的主机采用TCP连接的话,那么就得在各自局域网的adsl modem上面进行端口映射。
这样的话,就相当于两台具有合法IP地址的主机进行连接了。

比如你们要在自己局域网内做web服务器、FTP服务器,使得Internet上的网友可以访问,不就是这样进行端口映射的设置来实现的么?

需要一个服务器来中转!