当前位置:  技术问答>java相关

高手何在,请问如何箱qq一样在局域网内也可以建立udp的服务端进行listen而且网外的用户也可以访问到!满分送上!!!!

    来源: 互联网  发布时间:2015-02-24

    本文导语:  | 这个问题我现在也遇到了,不过更复杂,是JMF的RTP数据如何通过NAT的问题。 你的问题其实是网外用户的数据报的目标地址是什么的问题?是吧?因为局网用户出去后经NAT映射后,端口与地址都不再是局网你打开的地址和...


|

这个问题我现在也遇到了,不过更复杂,是JMF的RTP数据如何通过NAT的问题。

你的问题其实是网外用户的数据报的目标地址是什么的问题?是吧?因为局网用户出去后经NAT映射后,端口与地址都不再是局网你打开的地址和端口了。

其实UDP包是可以通过NAT的,你从局网发出的包,在外网上收到后可以得到它的源地址(这就是经NAT映射后的地址),你只要发到这个地址上,NAT会把你发过来的包再转成相应的局网址送到这台机器上的。


用多播地址的问题是拨号用户没法支持.


|
QQ 起动的时候,会在本地的 4000 端口进行 UDP Socket Listening,而服务端则在 8000 端口进行监听,如果你有 QQ 查 IP 的软件,你会发现所有拨号上网的用户的 QQ 端口号都为 4000 或 4001(开了两个 QQ,依此类推)。
如果是通过代理上网,则你的 UDP 数据包要经过代理转发,你的包先发到代理服务器,代理服务器再替你将你的数据包发到你的好友的 UDP 监听端口,此时你的朋友看到你的端口号,只是代理的端口号。

|
可以使用类MulticastSocket,每个客户端在一个广播地址的特定端口上监听UDP报文,而且在客户端启动的时候也向该地址进行广播,这样别人能知道你的存在,而你也可以知道别人的存在,还不需要服务器,而且信息总是最新的,再设置每隔一段时间重新广播。。。 

基本原理如下: 
多点广播: 
int broadcastPort=5678; 
int ttl=10; 
String broadcastAddress="239.80.80.80"; 
InetAddress multiAddr=InetAddress.getByName(broadcastAddress); 
byte[] bbuf=new byte[1024]; 
DatagramPacket multiDatagram=new DatagramPacket(bbuf,bbuf.length,multiAddr,broadcastPort); 
MulticastSocket broadcastSocket=new MulticastSocket(); 
multiSocket.send(multiDatagram,ttl); 

广播监听: 
MulticastSocket receiveSocket=new MulticastSocket(broadcastPort); 
receiveSocket.joinGroup(multiAddr); 
receiveSocket.receive(multiDatagram); 


说明:broadcastPort>1024就可以,ttl是广播包允许经过的路由器的个数,越大则越可以被更多的客户端监听到,但是给网络带来太大负担。broadcastAddress理论的取值范围为244.0.0.0到239.255.255.255,但是有些保留地址224.0.0.0到244.0.0.255。 
其它细节可以参考书籍或者API。 

    
 
 

您可能感兴趣的文章:

  • 请问高手在linux中用什么命令可以做linux的启动盘???在等待高手??
  • 高分求助 。。。。。。。。。。。。各位高手。可以不可以告诉我。当我下载完resin之后应该如何配置好一个jsp的环境。我的操作系统是win2k professional
  • java可以调用windows api吗,用jbuild 可以生成.exe文件吗,散分,高手出招
  • 哪位高手可以解释下Linux的消息机制吗?谢谢
  • 有那位高手乐意帮我一下阿,刚学linux,可以加qq么?我的499140279,谢了
  • 请问哪位高手可以帮我远程看看Fedora的安装
  • 请问高手们,有没有一款工具可以测试内核内存泄露的?
  • 请各位高手指点一下,在那可以免费下载WINDOWS CE4.0(Pocket PC2002)?
  • 想在Linux中对openoffice.org calc编程,就向可以用VB对excel那样,请高手指教!
  • 问高手,sun2.7系统自带的as是不是和gcc3.0.1不兼容,好像2.8的可以,是吗,如是这样,有谁知道as在哪边可以找到,请提醒
  • 请问高手,有没有办法可以控制文件的下载?下载文件,一般通过地址链直接链接过去就可以下载,但有些文件是要某种条件下才可以让客户下载,如
  • 哪位高手可以提供使用C/C++编CGI程序中,使用和设置Cookie的例子。为谢!!!
  • windowsxp下可以上网,linux下相同配置不能上网,请高手指点.
  • 请路过的高手指点什么地方可以找到LDAP原代码?
  • 请教高手,JtextPane可不可以按行改变颜色
  • 高手啊,请问如何将BufferedImage转换为可以用SOCKET传输的数据
  • 我有一个创意,是关于手机,掌上电脑等小型设备的,有高手可以与我联系,共同开发
  • CSDN的诸位高手们,请问在LINUX下,用那条命令可以编译C语言的原文件,在线等待:)
  • 高手指点,unix下有什么样的工具可以对程序进行汉化???答者有分
  • 各位高手。IBM AIX里没有CC命令怎么办,有地方可以下载吗?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高手何在????????:Servlet高手急救:欲从servlet输出图形,请问linux环境下如何配置,web服务器为tomcat
  • 高手,高手,高高手请进!
  • 有熟悉EXIM的高手高手么??
  • to 高手:学java应该怎样一步步学习,从菜鸟到高手.
  • 高分请高手,高手定能解决
  • 有高手研究Agent++麽?里面有个thread.h,蛮难读的,请高手指点
  • 难道高手区里的人就是高手?
  • 在dos下用bc31挑战高手******开发mssql程序,连接时报link err:undefined symbol GETNOTE in module DBEXTERN?(挑战高手)
  • 真正的linux高手,请看过来,看你符合高手标准不?
  • 难道这没有高手吗?难道这没有乐于助人的高手?(高分酬谢62+50+50)
  • 关于我对linux高手用yum,非高手用源码的理由
  • 高手救命,很急——ORACLE817安装在UNIXWARE711上,手工启动数据库后在netasst中连接错误,高手帮我看看?
  • 请教高手lvs的奇怪问题,我挺着急,希望高手别潜水,就就我,先谢谢了
  • 各个高手看看这个问题!本人第一次学习java所以要各位高手的帮助。。
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 我是新手,高手,高手,快来救我
  • EJB问题,请教高手(非高手莫进)
  • 请各位JAVA高手,网业高手看过来,我把能给的分都送出!!!只能给37分,哎!!
  • eWEEK沙龙征集高手座谈
  • 高手请进,中文乱码问题,这是我同一个问题的第五个帖子了,大伙帮忙,心情好郁闷.期待高手.


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3