我在写一个类似QQ的软件(DELPHI5),采用UDP协议,使用的是SYNAPSE的类库,因为只有SYNAPSE的类库支持UDP的SOCKS5代理,但是在使用的过程中我不知道怎么在两个使用代理或者网关的CLIENT之间直接发送消息(都是使用UDP),
如果哪位能帮我找到瘩案,不胜感激!!!!
总之我的目的就是当两个人都没有真正的IP地址时(当然前提是有中间服务器告知双方对方的虚拟IP地址),如何采用UDP协议互相发送消息,就象QQ一样

解决方案 »

  1.   

    UDP协议也属于TCP/IP协议
    应为此协议是可路由的,应此无需考虑他经过那些地方。
    只需知道目标的地址和端口就足够了。
    要知道,地址是确定目标机器的;端口是用来区别应用(或服务)的。
    **** 协议发送的数据包中包含了目标和自己的地址和端口 ****
    因此,两个局域网之间的机器通讯,最大的问题就是如何得知对方的地址了。当然,如果有一方的地址或服务器(包括代理,路由)是固定的会简单一些。
    否则,需要有一台固定地址(起码是双方知道)的机器牵线,
    告诉双方(起码也是要发信息的一方)对方的地址。
    当一方知道对方的地址和端口后,就可以发送信息了。
    当对方收到信息后可以从信息包中得知对方的地址和端口,就可以回复了。
    就这么简单。其他的事不需要你的程序操心。**********************************
    如果你使用NAT方式上网(如WinRouter),
    在Internet上的机器看来,你的地址和你的服务器地址是一样的。
    但你的端口是你的服务器分配的。
    他会把送到你端口的数据转送到你在局域网中的地址。
    **********************************
      

  2.   

    UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
    UPUPUPUPUPUPUP            UPUPUPUPUP                  UPUP
    UPUPUPUPUP                UPUPUPUP                      UP
    UPUPUP          UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP        UP
    UPUPUP      UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP      UPUP
    UPUP      UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP      UPUPUP
    UP      UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP      UPUPUP
    UP      UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP      UPUPUPUP
    UP      UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP      UPUPUPUPUP
    UP      UPUPUPUPUPUPUPUP      UPUPUPUPUP      UPUPUPUPUPUP
    UP      UPUPUPUPUPUPUPUP      UPUPUPUP        UPUPUPUPUPUP
    UP      UPUPUPUPUPUPUPUP      UPUPUPUP      UPUPUPUPUPUPUP
    UPUP      UPUPUPUPUPUPUP      UPUPUP      UPUPUPUPUPUPUPUP
    UPUP        UPUPUPUPUPUP      UPUP        UPUPUPUPUPUPUPUP
    UPUPUP            UPUP        UPUP          UP          UP
    UPUPUPUPUP                  UPUPUP                      UP
    UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
    UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
    UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
    UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
    UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
      

  3.   

    如果用hub组建局域网,则在其内部是通过广播的方式来发送报文的.然后针对自己的mac地址来接收.如果是用路由器之类的设备,则由路由来通过mac地址确定接收报文的主机.两个局域网之间的公共数据网之间是通过ip地址来确定地址的,一旦进入局域网内部,就用mac地址了.
      

  4.   

    以下是我的猜测:我不太了解SOCKS5,因此仅说一下双方通过NAT上网时,相互通信问题。通过NAT发出去的UDP包,将占用网关的一个UDP端口,这个端口在一定时间内(UDP超时设置)还映射到客户机的某个UDP端口上,因此就有可能相互通信。但此类NAT软件一般都有个安全设置,仅当客户主动发出UDP包到某一IP后,从这一IP发回的UDP包才可到达客户机,其它IP的UDP包将不会传到客户机,这样也就防止了恶意的端口扫描。最终的结果就是,如果双方都在NAT下,建立首次的UDP互通是成问题的。