求高手赐教!!急啊!!(200分)

  • 主题发起人 主题发起人 karnor
  • 开始时间 开始时间
K

karnor

Unregistered / Unconfirmed
GUEST, unregistred user!
  小弟最近准备开发一个商务通讯软件,该软件具有类似于OICQ的功能。目前有不少技术上的疑惑,望高手给予指导意见,不胜感激!
1.用Delphi5.0的Socket获得客户端的IP地址是可以的,客户端是自己拨号上网,那么得到的是动态分配的IP地址,是唯一的,但是如果客户端是在局域网内用ADSL上网,那么用Socket的方法得到的是不是该机器在局域网中的IP地址,如果是这样的话不是不能定位用户了吗?OICQ大致是通过什么方法来发送给指定用户信息的呢?是通过IP地址吗?如果是的话遇到上面的情况怎么办?
2.请问怎样使服务端的软件能实时监测到有哪个用户突然上线或下线了,尤其是下线,如果是用户突然电话线中断连接,那服务端又怎么监测到呢?

我做了试验,发现用WinSocket的方法对于同在局域网内或同是拨号上网的机器,
都能监测到对方的IP地址,但是如果两台机器一台拨号上网,一台通过局域网上网,
那么由于存在一个网关的问题,服务端则不能监测到对方的IP地址了,必须另想办法。
听说Delphi6.0中的Indy控件面板上的TCPClient和TCPServer控件能解决这一问题,
另外听说用UDP控件也能实现这样的功能,能给予我帮助吗?




 
定位用户用IP地址加端口的方法


其它在听高手怎么说
 
1.你问的实际上都是连接的问题,只要你的服务器是在互联网上,是可以连接的。那么,你
的客户端可以不管,只要它能连上你的服务器,服务器就会知道客户机的IP地址。
2.设定一个定时查询,若客户机连结一次就刷新一次,比如说一分钟一次连接,服务器一分
钟一次查询,若服务器查出客户机的连接是两分钟以前,那说明这个客户离线了(这是不正
常情况),若客户机正常退出,完全可以通知服务器。
没有具体实现过服务器与客户机在互联网上的运用。但想到这与聊天室是一个道理。我们在
局域网内连上互联网不是也能聊天吗?当然,服务器得到的IP地址是同一个,但你可以自己
定义不同的数据头。比如说你传输时再加上自己客户机在局域网内的IP地址,不就能分别开
来自同一局域网而不同的客户机了。
以上纯属想象,不对之处不要笑话我。呵呵...
 
1,你得到对方IP是服务器的IP,端口是服务器给这个 连接分配的端口
2、你要知道哪个用户下线,我有个办法解决,用异步模式一个端口发送存在消息包
如果在指定的时间内没有收到数据,就关闭这个连接...我的QQ 775033,欢迎找我讨论
3、INDY是通过端口隐射的办法达到目的,里面有这个控件的
不过我想这对于TCP,很麻烦,UDP到是很容易做
 
我用winshoe(indy的前身)发觉一个有趣的现象, 即tcp连接只要中断(不管是正常还是非正常), 双方都能马上得知, 不知道它是怎么做到的, 查源代码几遍了也没发觉奥秘所在.
 
1.udp定位是ip+port,tcp不用定位。
2.现在的delphi组件没有异常离线的检测,正常离线,发送信息到服务器端,异常离线在onerror里处理,断电和掉线采用低级办法。
 
后退
顶部