南山狒狒

专注WinCE和GIS开发,提升ArcGIS和DirectShow,涉及过BizTalk,有Delphi经历
09年后的路,应该好好走了。

  博客园  :: 首页  ::  :: 联系 :: 订阅 订阅  :: 管理
很久的问题了~!现在我有能力回答了...  
   
  //遇到的问题就是当客户端在内网.无法收到服务端发来的数据.  
   
          为啥收不到?请确定你服务器的数据向那发了?内网主机向外网通过UDP进行通信,需经过内网的网关.在内网机器里,你可能是定制好了,我是从内网机器的1234端口发信息到外网机器的1234端口.而返回就直接向内网机器的1234端口发送.问题出现了,这个由服务器向内网机器发送的信息被内网的网关丢掉了.所以,内网就收不到了!为什么?其实呐,内网机器向外网发送信息,在经过网关时,信息的头内容被改变了.到了外网机器那时,就不是1234->1234这个端口对应关系了,可能是60000->1234这样!这就是网关的转换啦.  
          好了,情况说明,解决方法也简单.从MSDN得知,UDP通信时,Winsock的RemoteHost与RemotePort属性是可以随便更改的.也知道了RemoteHostIP就是跟你通信的机器的IP,也知道RemotePort就是跟你通信的机器的端口.只要内网机器向外网机器发送UDP数据时,外网机器在DataArrival事件发生时,调用GetData取得数据后,就可以通过RemoteHostIP与RemotePort,知道对方的IP和端口了,这时再把自己的RemotePort与RemoteHost属性改为相应的端口与IP就可以返回信息给内网机器了!

---------------------------------------------

外网通信不能采用UDP广播方式,因为UDP广播数据无法跨路邮传送。建议采用IP组播方式。  
  组播技术被认为是WWW技术推广之后出现的最激动人心的网络技术之一。组播是一种允许一个或多个发送者发送单一的数据包到多个接收者的网络技术。组播源把数据包发送到特定的组播组(Multicast   Group),而只有加入到该组播组的主机才能接收到这些数据包。组播可以大大的节省网络带宽,因为无论有多少个目标地址,在整个网络的任何一条链路上只传送单一的数据包。  
   
  单播(Unicast)传输:在发送者和每一接收者之间实现点对点的网络连接。如果一个发送者同时给多个接收者传输相同的数据,则必须相应地将数据包复制成多份后再分别投递。如果有大量主机希望获得数据包的同一份拷贝,将导致发送者负担沉重、延时长、网络拥塞;为保证一定的服务质量需增加硬件和带宽。  
   
  组播(Multicast)传输:在发送者和每一接收者之间实现一点对多点的网络连接。如果一个发送者同时给多个接收者传输相同的数据,只需投递一份数据包就可以了。组播提高了数据的传送效率,减少了骨干网络出现拥塞的可能性。  
   
  广播(Broadcast)传输:是指在IP子网内广播数据包,所有在子网内部的主机都将收到这些数据包,不管它们是不是否乐于接收。广播的使用范围非常小,只在本地子网内有效,因为路由器通常会封锁广播通信。广播传输会增加非接收者的开销。  
   
  目前,使用得最为广泛的组播技术是IP组播技术。IP组播技术是一种为优化使用网络资源而产生的技术,通常用于多点工作方式下的应用程序中,它是标准IP网络层协议技术的一个扩展。从Steve   Deering于1989年提出的RFC   1112(“Host   Extensions   for   IP   Multicasting”)中的定义可以得知,IP组播的核心思想是:通过一个IP地址向一组主机发送数据(UDP包);发送者仅仅向一个组地址发送信息,接收者只需加入到这个分组就可以接收信息;所有的接收者接收的是同一个数据流;组中成员是动态的,可以根据自己的意愿随时随意加入或退出;每一台主机都可以同时加入到多个组中,每一个组播地址可以在不同的端口或者不同的Socket上有多个数据流,同时许多实际应用可以共享一个组地址。IP组播技术可以有效地避免重复发送可能引起的广播风暴,并且能够突破路由器的限制,将数据包传送到其它网段。  
   
  IP地址方案专门为组播划出了一个地址范围,在IPv4中为D类地址,范围是224.0.0.0到239.255.255.255,并将D类地址划分为局部链接组播地址、预留组播地址、管理权限组播地址等,分配如下:  
  局部链接地址:224.0.0.0~224.0.0.255,用于局域网,路由器不转发此范围内的IP包。    
  预留组播地址:224.0.1.0~238.255.255.255,用于全球范围或网络协议。  
  管理权限地址:239.0.0.0~239.255.255.255,组织内部使用,用于限制组播范围。   
 
posted on 2008-07-17 20:21  Jrong  阅读(399)  评论(0)    收藏  举报