如题

解决方案 »

  1.   

    如果你在自己的网内接收他所在主机 对就外网 IP 对应端口的信息是可以达到的 ,不过这个外网端口是随机分配的,所以接收者接收指定IP Port不可行ReceiveFrom(buff,sizeof(buff),Port,Address,flag) ,接收广播可以 ,但存储的IP Port 是对方外网的地址
    ReceiveFrom(buff,sizeof(buff),(LPSOCKADDR)&client,sizeof(sockaddr_in),flag);里面的参数你应该都明白吧 不明白这个问题你也不用问了 去学基础吧!
      

  2.   

    @@ 汗死
    在通常的网络配置环境下,网关设备一般都不会转发广播包,也就是说,跨网段的广播收发是不现实的,如果你非要用UDP数据报来发送类似广播的东西,建议你看看 组播 (Multicast ),这个可以跨网段传输,前提也是需要网关设备转发组播包,但是与广播包不同的是,开启组播包转发的网关设备普遍的多
      

  3.   

    neil_cn(Neil) 你不要假设别人问的是这么低智商的问题好不。
      

  4.   

    to: minger909(惜之) 
    我从来不会因为一个问题的难易而去恶意揣测提问者的智商,我想你是误会了
    另外,如果你成功接收了跨网段的“广播”包(即 Broadcast),还望不吝赐教,谢谢
      

  5.   

    楼上两位稍安勿燥,怪我提问的方式不对,是这样的,网络上有个工具叫Battle.lan可以实现不同网段联机对战,想不通的是这个软件在使用时建立游戏的人不需要开启它,只需要加入游戏的人开启并填入对方的IP就可以像在局域网一样联机,所以想冒昧揣测下它用到的技术
      

  6.   

    这个可以肯定的说不是广播,甚至不会是组播(多播)
    估计是本地IPX封包经过平台程序封装为TCP/IP数据包发送,通过某种中间转发机制到达目的,再由平台程序解包为IPX包送到游戏程序。
    上面所说的“某种中间转发机制”,可能是服务器,也可能是服务器仅在最初创建房间时协助“选举”主机过程,一旦主机被“选举”确定(或者会把所有房间内的机器通过某种选举机制确定其各自的权值),服务器退出前台,不负责转发,转发工作由被“选举”出来的主机承担以上仅仅是猜测,以前用过浩方,但没具体研究过,很可能我说的完全是错误的,但是有一点是确定的,这样的需求,不会在对战中选择UDP数据包,不管是广播还是组播,都不会。
      

  7.   

    Battle.lan和浩方不同之处在于,建立游戏的一方*不*需*要*运行任何额外的程序,直接建立游戏,而加入方运行Battle.lan填入对方IP以后就能在游戏的局域网模式看到对方并且进行游戏,这么说建主方的游戏程序仅仅是同平时一样正常地同网内的计算机进行通信,其通信数据并没有经过任何改造转发,而把加入方的计算机识别为同一子网的邻居来对待
    以上均是推测,主要是对游戏建立方不需要运行Battle.lan感到费解,想知道这个程序在加入方到底做了什么工作,能够主动获取到建立方的通信数据(因为对方没有运行额外程序,当然是游戏程序自己主动发送的咯,所以想到了广播)
      

  8.   

    顺便说一下,基本上可以确定是基于tcp的,而且我个人从来没听说有基于tcp的广播也许我的知识面还是很窄
      

  9.   

    TO:neil_cn(Neil) 
    在通常的网络配置环境下,网关设备一般都不会转发广播包.
    这个 “一般”是什么意思?
    上面是你的有的原话 ,我不知道你的意思是网关不转发内部的包,还是不接收外部的包。
      

  10.   

    To:neil_cn(Neil)
       那一定至少有一台公网服务器,而且这台服务器就算不做转发,也得做初期的“注册”或者“选举”工作可以确定没有,你可以到网上下一个Battle.lan看一下,如果A和B要联机游戏,A直接在局域网中建立游戏,B运行Battle.lan填入对方IP,再手动启动游戏,在局域网中就能看到A建立的游戏,即使AB均不能访问外网的时候,只要各自局域网通信畅通,依然可以通过Battle.lan联机你说的浩方那种方式我能理解一点,但是对Battle.lan这种不对A进行改造就能让B连上A的技术比较感兴趣
      

  11.   

    to: CoderPlusPlus(暗思透竹)
    即使AB均不能访问外网的时候,只要各自局域网通信畅通,依然可以通过Battle.lan联机那么这两个局域网不通过公网怎么连通???!!!比如说我在家里,把ADSL关掉,你在家里,把你的外网页断掉,我们只在各自的内网里,然后你建游戏,我启动Battle.lan,我就能加入你建立的游戏???天哪。完全颠覆了我对TCP/IP的基本理解
      

  12.   

    to:minger909(惜之) 
    我说的“一般”,是指网关设备出厂时都会设置为“不转发广播包”,网关设备在现场部署时,没有特殊要求的话,管理员不会修改这个设置,甚至有些网关设备根本没有这个设置,默认就不转发广播包至于你说的“上面是你的有的原话 ,我不知道你的意思是网关不转发内部的包,还是不接收外部的包。”
    我们都知道,网关设备至少有2个或者2个以上的 Interface 来连接2个或2个以上的网络,Interface 之间不传递广播包,就是不转发广播包的意思,既然都不转发了,自然不存在接收的问题
      

  13.   

    我说的是这种情况,例如A机IP为192.168.105.89,网关192.168.105.65,子网掩码255.255.255.192,而B机192.168.106.13,网关192.168.106.1,子网掩码255.255.255.192,这样两台主机分别处于不同的子网,网络邻居里是看不到的,其它子网直接通信的方式也不行,但是物理上通信应该是可以实现的,例如用QQ等传送文件时都可以达到10M/S以上的速度,而连接外网又是共同通过外层一个网关(类似树型结构吧),有时由于网关的问题导致无法访问Internet,但其它内网通讯工具例如Ipmsg仍然可以使用,这种情况下Battle.lan依然有效,所以Battle.lan并没有连接到外网服务器,再说了,即使存在这样的服务器,那也应该AB都使用客户端来连接啊(类似浩方),而这里的情况是只需要B机运行Battle.lan就可以说白了,我问的就是这种情况                    路由器
                       /      \
                  路由器       路由器
                /   |   \    /   |   \
               A1  A2   A3  B1  B2   B3的结构下,让A1和B1就像在一个子网内一样的进行通信(至少一台主机上的应用程序"认为"自己是在子网内工作)的
      

  14.   

    这种结构下,用组播确定节点位置,再用UDP或者TCP通讯,总之不会是广播
    你具体可以抓包看看
      

  15.   

    TO:neil_cn(Neil) :
    我说的“一般”,是指网关设备出厂时都会设置为“不转发广播包”,网关设备在现场部署时,没有特殊要求的话,管理员不会修改这个设置,甚至有些网关设备根本没有这个设置,默认就不转发广播包
    那好 ,你也承认,网关可以发送局域网内数据包了。(别说会么默认设置,我们在讨论如何接收,而不是实际有多少局域网可以发送出来被你接收到 OK?)
    更特殊一点 网关可以指定某些端口用于监听,或连接内外网的特定IP Port。这个没错吧。那么你认为得到其他局域网广播的难点在什么地方?
      

  16.   

    楼上两位能详细给我讲下我这种情况的实现吗?
    要点:
    1、A机不知道B机上Battle.lan的存在(甚至可以不知道B机的存在)。这一点是显而易见的,因为我们的程序只是在B机上运行,不对A机进行任何改造。
    2、A机上的游戏程序本身(我们未对其进行干涉)能对B机进行回应To:minger909(惜之):
    你的意思是跨网段接收广播包是可实现的,能具体介绍个例子吗?Battle.lan在各高校中普遍使用,很少听到不成功的例子,而这种情况下使用者一般是无法干涉网关的设置的TO:neil_cn(Neil):
    我开始想这个问题的时候抓过包了,魔兽建立游戏后首先发送的是UDP广播包,所以我才跑来问这个问题,至于游戏开始后的通信、用Battle.lan和不用时双方的数据包等有待进一步分析
      

  17.   

    广播报文包括全网广播报文和直连广播报文。全网广播报文的目的IP 地址为全1(255.255.255.255)或全0。直连广播报文是指目的IP 地址是子网的网络广播地址,但源IP 地址不是在这个子网网段中的报文。交换机在转发这种报文时,除非它与该子网相连,否则交换机并不知道这个报文是否是广播报文。
          如果广播报文经过交换机转发到达了目的网络,由于交换机也隶属于此子网,交换机会接收该广播报文,而且由于交换机的VLAN 功能要隔绝广播域,通常不会继续将报文转发到该网络上去广播。通过配置,用户可以选择将广播报文转发到网络上广播另外,关于你说的抓包,没有进一步的数据包的信息的话不好分析判断
      

  18.   

    恩...
    我们换个思路
    一般在内网抓包是不能跨网段的(不要太深层次去理解我的话,用最一般的想法)
    不过之前看到一篇文章讲用WINPCAP抓包的时候
    可以通过在网关那监听的方法来抓取相邻网段的数据包
    我们知道的是
    WAR3在建立主机后会发送UDP包
    那么如果上面的监听成功
    这样再连接就是没有“理论问题”的了不过很不小心
    怎么监听没注意唉~~