我是通过局域网上宽带,可是大家都知道局域网的IP都是192打头的,如果用UDP或SOCKET
控件的LOCALIP属性得到的IP应该是本局域IP吧?可是大家都知道如果用QQ SNIPER之类的
查IP工具查到的IP却是主鸡IP,我QQ设置的端口是8000可是查到的却不是8000而是别的,除
非你是拨号上网或者你用的是主鸡才可能是8000,假如我们有2人,2人都分别是2网吧内局域网
的分鸡,它们的IP都是192开始的,这样用UDP控件和SOCKET控件互相访问(就象QQ一样互发消息)
怎么实现?这里面主要是IP问题?分鸡是怎么自己的端口映射到主鸡上面的?用DELPHI或CB怎么实现?

解决方案 »

  1.   

    这就是网关的作用了,当我们发消息给中转服务器的时候,网关会给QQ一个映射端口,每台电脑的映射端口都不一样,所以我们在局域网内是看不到自己的IP和端口的。
      

  2.   

    QQ首先要登录他自己网络服务器,哪里维护着一个IP列表,那个列表里你机器的IP是你登录ICP服务器时动态给你分配的是唯一的。如果你跟某个网友聊天,程序是通过列表的IP跟对方机器对话的,这个动态IP只要你不断开连接是真实有效的。如果你要跟Internet上的其他机器对话,首先要知道他登录Internet网络的IP然后就可以用Socket了。
      

  3.   

    关于两个局域网的UDP和SOCKET通讯可见
    http://expert.csdn.net/Expert/topic/1684/1684309.xml?temp=.3360102
      

  4.   

    映射端口是网关的问题,不能自己定的,例如htttp用的都是80端口,如果你能指定使用80端口,那就天下大乱了;当然,公网IP不存在这个问题。
    不清楚你想知道自己的公网IP做什么用,一般的方法是给对方发个消息,那消息的文件头就能有你的IP和端口。
      

  5.   

    一般来说标志某个用户时使用其IP地址和IP包中的源端口,当两台计算机通过Internet在通信时,无非通过代理或者是NAT的方式,不管是哪种方式,实际在通信时使用的IP都是两个局域网在Internet上的IP地址,而不是局域网的IP地址(但当你在局域网内用sniffer等工具查看是,看到的是局域网的IP。因为当你上网时,你的代理服务器已经将你的IP包中的IP地址转化为Internet上的IP地址了,当数据包回来时,代理服务器又将Internet的IP地址转为局域网上的IP地址)。所以当你编写聊天程序时,如果是两个局域网通过Internet连接,此时在其中的一段查看时,看到的IP地址都是另一个局域网在Internet上的IP地址,也就是说看到的IP地址都是一样的。