http://www.delphibbs.com/delphibbs/dispq.asp?lid=1078770
来自:sonicyou, 时间:2002-5-2 2:23:00, ID:1080111
问题很好解决,用Nmudp,我做icq的时候,这样实现的:
DataReceived(Sender: TComponent; NumberBytes: Integer; FromIP: String; Port: Integer);
var ……
begin
……
Stream:=TMemoryStream.Create;
Nmudp.ReadStream(MyStream);
……
ip:=FromIP;
然后发回获取的IP和Port
Port是随时变化的
你可以测试一下,没问题的
给分吧
来自:Sunny18, 时间:2002-5-2 5:26:00, ID:1080131
我来说说看:
OICQ之间的通迅应该是这样的,当你登录时,会QQ服务器提供你当前所在的IP地址各端口
号,然后当你的好友上线时,就会从QQ服务得到这个IP和Port,以后的通迅才能继续!
上面可能没说得太清楚,下面举个例子来解释,
比如说,你在一家网吧里上网,这个网吧的服器有一个真正的IP地址(可能是临时的--对于
拨号上网;或者是固定的--对于专线上网)比如是61.168.45.120,同时有一个网吧局域网
的IP地址,比如192.168.0.1。而你在该网吧内IP地址为192.168.0.3的机器上用OICQ,当你
上线时,QQ会按你设定的路由发送数据(对于网吧,一般是设IP为192.168.0.3的机器的默
认网关为网吧的服务器,即192.168.0.1的机器)把你所在机器的IP(192.168.0.3)和Port
(一般第一个QQ为4000,二个为4001,依次类推,这时设为4000)通知网吧服器,由于网吧
的服务器(也可说是一个网关)要同时满足多台机器上网的需要,会在它的局域网地址(
即192.168.0.1上)动态的分配一个Port(如 4782)与你通迅,同时再在真正的IP(
即61.168.45.120)上分配一个Port(比如 5472)将你的数据发送到互联网上,这里即为向
QQ服务器发出它的IP和Port(这些都是在网吧服务器上运行的一个代理软件 如WinGate、
SyGate等 所做操作)。
{注意:这个发出的IP是网吧服务器的那个真正IP,Port为相对于这个IP的一个端口(5472)}
现在QQ服务器就把你的QQ当着是在IP为61.168.45.120的机器的Port 5472上运行了,当你的
好友上线时,它就会得到这个IP和Port,然后和你通迅,即把所有发给你的数据都发到
IP为61.168.45.120的机器的5472 Port上,然后网吧服务器上所装的代理软件(比如
WinGate、SyGate等)就会把这些数据通过局域网地址(IP:192.168.0.1,Port:4782)转发到
你所在的机器(192.168.0.3)的相应Port(4000)上,即完成通迅。
其实这中间主要有两个方面 一、就是网吧服务器中的代理,它负则对局域到互联网、互联
网到局域网的数据进行转发。第二,也是关键的一点就是QQ每次上线时会向QQ服务器注册自
己所在的IP和Port,并从QQ服务器中读出在线好友所在的IP和Port信息而进行通讯。当然处
于局域网时这些操作又都是通过网吧服务器中的代理完成的。
以上是我个人的一些见解,如有不对之处,还望各位行家里手多多指点、共同研究进步。