如何实现因特网上任意两台机器的通讯 (20分)

青云

Unregistered / Unconfirmed
GUEST, unregistred user!
如何实现因特网上任意两台机器的通讯

dephi自带的demos里有一个chat的小程序,主要用SocketServer和SockerClient来实现这个功能
我想,类似的程序在网上非常的多,主要用来实现局域网里聊天的功能。彼此通讯是通过对方的ip地址或计算机名来实现的;
我估计在因特网上也可以实现类似的功能。于是我便和我朋友做了一个实验:
我和他在不同的地方分别用拨号上网。
我的机器作为主机,我先用http://ip.loveroot.com target=_blank>http://ip.loveroot.com 查了一下我机器在因特网上的ip。
然后把该ip告诉我朋友。这样他输入该ip,我们就可以聊天了。
但是我想假如我用的机器是在局域网里通过代理来上因特网的,那该怎么和我朋友连起来呢?

接着我又做了一个实验,因为我宿舍里有几台机器,我的机器是代理服务器,其他机器通过它的代理上因特网,
现在我再用http://ip.loveroot.com target=_blank>http://ip.loveroot.com 查了一下该机器在因特网上的ip,发现它的ip与代理服务器一样。
我还是用这个ip和我朋友连接,发现这样就不行了。

实验表明用SocketServer和SockerClient这两个控件实现点到点通讯
要么只能在局域网,要么只能在两台代理服务器之间运行(这是我的想法,可能不正确)
在Internet下,如何让两台通过代理服务器的机器互相通讯呢?
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=780315
看此帖
 
“ip与代理服务器一样”???你的代理服务器是不是装了两张网卡?那么就应该有两个IP啊,
怎么会一样呢???不懂。
 
Internet上两台计算机通讯主要要确定双方的IP地址:
确定双方的IP地址有如下的方法:
IPConfig -A
可确定本机的IP地址,这种方法对拨号上网,ADSL主机有用,对处于代理服务器内部机器
无用,因为代理服务器会自动分配一个端口给内部计算机,而对外则使用统一的IP地址

如果要想实现代理服务器内部机器之间通讯就较为麻烦
假设有A,B 两个代理服务器,C,D两台计算机分别位于A,B,如果C,D之间想通讯需如下
步骤:
1。 用C和B通讯,在B上确定C的IP地址和端口号(D和A通讯也一样,这样做的目的是确定
一方的IP地址和端口号)
2。 用D向刚取得的IP地址和端口号发数据,C收到数据后可知D的地址,这样两台计算机
之间的IP地址都知道了,就可以相互通讯了
解决这个问题的关键想法是如何确定双方的IP地址和端口,上面的方法也就是利用现有的
设备来确定双方的IP地址和端口
 
thomashukaidi朋友提供的信息不错,问题其实和我提的一样。谢谢了!
------------------------------------
cp0574朋友,您误解了我的意思,对于通过proxy代理技术来上网的局域网来说,它在因特网
上的ip只有一个,那就是isp分配给代理服务器的ip,您理解的ip是局域网内部的ip。
-------------------------------
TK128朋友的理解和我想的差不多,但是如何用dephi来实现这个功能呢?
有没有那位朋友能写一段简单的代码演示一下。


 
老实讲,这个问题应该是属于比较复杂的

曾经有好多人讲论过地
 
你死心吧,如果没有中间的固定IP服务器,是没有办法完成这种任务的,这和编程
没有关系了,如果你硬要编程实现,你可以这样考虑:
1. 你在A上编制一程序(不管这台计算机是内部外部都可以),接收外部消息,如果
接收到消息,就返回给发送者一个消息
2. 在其他计算机上编制一个扫描程序,这个扫描程序应该这样写:
a). 维护一个地区码表(每个地区IP地址不一样),以减少可能的IP地址
b). 向目的地区所有可能的IP地址和可能的端口发消息
c). 如果有返回说明你找到你想找的计算机
你看上面的方法现实吗?
 
如果其中一个拥有真实IP,
只要让没有真实IP的那台用TCP/IP协议建立一个连接就可以了。
 
谁有UDP穿越代理服务器的源码 给我一份嘛
谢谢
scpxjd@263.net
 
顶部