一\环境:
以下的两个局域网都可以连接到internet,局域网内的机器通过路由器共享上网
1\局域网A:外网ip 211.157.1.3         局域网内的节点A:192.168.1.2:60001
2\局域网B:外网ip 211.157.1.4         局域网内的节点B:192.168.2.2:60002二\实现功能
那么我如何实现节点A与节点B间的数据传送呢?
通过TCP或UDP,但IpEndPoint应该是什么呢?

解决方案 »

  1.   

    这个是典型的P2P问题
    一般通过UDP进行通讯涉及到UDP的打洞原理需要一台外部的机器来协助打洞
      

  2.   

    yumanqing 指的是通过在服务器端发布一个web service(FileService)来实现客户端 -> FileService的下载文件与上传文件吗?
      

  3.   

    cxx1997 指的是需要代理还是需要做Network Address Translation,网络地址转换(早上在我的帖子中看到的)?
      

  4.   

    你说的点对点传输,类似QQ的,可能webservice不适合,不过也可以实现
      

  5.   

    web service是需要发布后使用的资源,需要如何操作呢?
      

  6.   

    我想web service的方式,是通过中转服务器来中转所有数据我讲的P2P模式下,是需要一个网络地址转换负责帮助两个点建立连接,连接建立后就可以直接访问对方否则的话就需要有一台机器能提供外网访问端口了如果你已知你的网络设备类型,还可以通过广播的方式来寻找连接所需要的端口,不过就不通用了,你需要非常确定两台机器的上网类型
      

  7.   

    TO:cxx1997 我刚看到一篇有关P2P与NET的文章 ,上面的P2P服务器端的作用就和你说的
    web service差不多,测试一下代码看看是否能实现:)
      

  8.   

    这个问题是什么意思啊
    是不是大家搞错了啊
    他只是想局域网的两个点通讯,不是要和外部通讯啊
    System.Net.IPEndPoint ip = new IPEndPoint("192.168.1.2", 60001);
    这样就可以吧,需要P2P吗路由器难道不知道这个是另外一个内网的IP吗,肯定会转发到另外一个内网吧
    小弟乱说的,错了不要骂人啊
      

  9.   

    关于P2P,我的理解:
    一\P2P的环境
    1\P2P服务器:用于存储客户端的信息(如客户端网络端点地址,客户端属性等等)
    2\P2P客户端:至少2个,这样才能达到客户端向客户端共享的需要
    P2P客户端启动时都需要向P2P服务器发送登陆消息
    并从P2P服务器得接收到其它所有P2P客户端信息(如客户端网络端点地址等),
    退出时都要向P2P服务器发送注销消息
    二\P2P运行流程
    1\P2P服务器启动,随时监听P2P客户端的登陆\注销等等事件
    2\由私网的网络端点转换为公网的网络端点
    这P2P客户端各自的NAT(Network Address Translators)来完成的,
    (如私网网络端点1.1.1.1:1000 =>公网网络端点211.157.1.3:40000),
    并且在P2P客户端向P2P服务器端发送登陆请求时由服务器记录下其公网的网络端点地址(211.157.1.3:40000)三、示例
    1、环境
    P2P服务器:211。157。1。1:1000
    P2P客户端A:192。168。1。2:2000(私网端点)、211。157。1。2:2000(对应的公网端点)
    P2P客户端B:192。168。1。3:3000(私网端点)、211。157。1。3:3000(对应的公网端点)2、事件:P2P客户端A、P2P客户端B登陆到P2P服务器后,P2P客户端B向P2P客户端A发送共享数据
    P2P服务器启动.....
    P2P客户端A,登陆到P2P服务器.....:P2P服务器记录P2P客户端A的网络端点-211。157。1。2:2000......
    P2P客户端B,登陆到P2P服务器.....:P2P服务器记录P2P客户端B的网络端点-211。157。1。3:3000......
    P2P服务器向P2P客户端广播发送所有P2P客户端信息(公网网络端口等等)......
    P2P客户端B向P2P客户端A发送数据(B从P2P服务器上获得的A的网络端点211。157。1。2:2000)......=============================================================上面是我的个人理解,由于没有公网服务器做测试,希望能看到大家的看法:)
      

  10.   

    所以我理解的web service服务实现,也只是WEB SERVICE替代了如上的P2P服务器,也可以使用其它的东东来替代P2P服务器。
      

  11.   

    是的,如上面的解释C -> S S-> C C->C 数据都是序列化数据进行传输的,序列化数据进行传输感觉不是P2P的重点吧....
      

  12.   

    P2P有一个很重要的能力就是判断 节点的上网类型NAT设备在处理内网和外网映射时区别很大
    最简单的是端口不变的映射对于协议而言,UDP穿透比较容易,如果你想建立TCP的穿透连接,就困难很多了web service服务在处理这个方面能力比较弱,你需要直接取得SOCK包,甚至要伪造SOCK包来完成
      

  13.   

    2、事件:P2P客户端A、P2P客户端B登陆到P2P服务器后,P2P客户端B向P2P客户端A发送共享数据 
    P2P服务器启动..... 
    P2P客户端A,登陆到P2P服务器.....:P2P服务器记录P2P客户端A的网络端点-211。157。1。2:2000...... 
    P2P客户端B,登陆到P2P服务器.....:P2P服务器记录P2P客户端B的网络端点-211。157。1。3:3000...... 
    P2P服务器向P2P客户端广播发送所有P2P客户端信息(公网网络端口等等)...... 
    P2P客户端B向P2P客户端A发送数据(B从P2P服务器上获得的A的网络端点211。157。1。2:2000)...... 
    比如你这个描述,
    第一NAT必须是端口不变的映射
    第二P2P客户端B向P2P客户端A发送数据(B从P2P服务器上获得的A的网络端点211。157。1。2:2000)......  
       这一消息,会被A的路由器自动放弃(2000端口是只用于和P2P服务器打交道的,其它IP对这个端口的包,被认为是攻击)所以你根本建立不起连接,要完成这一步骤,你需要找本P2P的书,好好了解下
    目前P2P做的最好的,我觉得是SKPYTE,基本上QQ\MSN都用不起来的情况下,SKPYTE是最后的选择