该文章由 Binkery 发布于 Binkery技术博客 http://www.binkery.com 如转载请注明出处,该文章的链接地址为 http://www.binkery.com/archives/319.html

mDNS的Java实现分析

JmDNS实现了java的mDNS。在使用这个jar包开发Android应用的时候,我存在一个疑问。我使用jmDNS打开了5353这个端口,并且通过这个端口监听或者发送一些信息。那么如果有两外一个应用,它也用这个工具,使用相同的方式,使用相似的服务。那么是不是会有端口号冲突的问题?如果冲突了,这个端口号是怎么处理的?

不过经过了一番搜索,看源代码,还有请教同事。我现在的理解和之前的理解还是有点差别的。先从Java层去分析一下jmDNS是怎么实现的。

首先使用java.net提供的MulticastSocket类来创建一个socket。

MulticastSocket mSocket = new MulticastSocket(5353);

然后选加入到某一个组群里。这个组群被定义成224.0.0.251,必须是这个。

mSocket.joinGroup(InetAddress.getByName("224.0.0.251").getHostAddress());

然后起一个线程,接收数据包。

DatagramPacket packet = new DatagramPacket(buff,buff.length); mSocket.receive(packet);

发送我就不说了,收到数据包后解析我也不说了。

说一下端口冲突的问题。因为使用的是UDP协议,所以MulticastSocket是可以实现多个对象,重复绑定同一个端口的。至少在我目前测试的结果,这样子做是合法的。

本站文章除注明转载外,均为本站原创或翻译

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果

转载请注明:文章转载自:Binkery技术博客 [http://www.binkery.com]

本文地址:http://www.binkery.com/archives/319.html

MulticastSocket绑定端口的问题的更多相关文章

  1. Netty源码分析第1章(Netty启动流程)---->第5节: 绑定端口

    Netty源码分析第一章:Netty启动步骤 第五节:绑定端口 上一小节我们学习了channel注册在selector的步骤, 仅仅做了注册但并没有监听事件, 事件是如何监听的呢? 我们继续跟第一小节 ...

  2. nginx 域名绑定 域名, nginx 域名绑定 端口

    一.nginx 域名绑定 域名 nginx绑定多个域名可又把多个域名规则写一个配置文件里,也可又分别建立多个域名配置文件,我一般为了管理方便,每个域名建一个文件,有些同类域名也可又写在一个总的配置文件 ...

  3. [CISCO] Telete/SSH 之 Port 绑定/端口安全

    [网络] Telete/SSH 之 Port 绑定/端口安全 一.前言 之前写完了网络] DHCP 之 Mac 绑定,CiSCO 交换机配置 SSH 登陆.这次我们再试试能不能挖的在深入些. (1) ...

  4. tomcat绑定域名绑定端口及更换ROOT目录

    一.更换ROOT目录 tomcat默认网站目录为 webapps/ROOT ,那么我们如何改为自己的网站目录呢? 1.打开并编辑tomcat目录下的 conf/server.xml 大约在148行的位 ...

  5. Netty源码分析--Channel注册&绑定端口(下)(七)

    接下来,我们看到的就是两个非常重要的方法 就是 processSelectedKeys() 和  runAllTasks() 方法了. selectionKey中ready的事件,如accept.co ...

  6. 如何解决飞秋FeiQ绑定端口错误

    今天启动feiQ居然报错,绑定端口2425错误,如您正使用FeiQ或IPMsg,请先退出. error = 10049... 百度谷歌之后,本人如此解决 1.netstat -an 查看端口 2425 ...

  7. H3C交换机删除VLAN与其绑定端口配置

    在系统视图下,执行 undo int vlan 2 undo vlan 2 可以删除vlan2的配置信息. 执行 undo vlan all 可以删除所有的vlan信息. 在vlan2视图下,执行: ...

  8. SpringCloud 踩坑之 注册中心绑定端口一直是8080

    今天在启动注册中心服务时,突然端口一直是8080,找了好久一直没找到原因,先看看我有问题的配置 spring: application: name: eureka-server profiles: d ...

  9. Netty ServerBootstrap如何绑定端口

    这篇讲netty服务端ServerBootstrap如何启动 前言 BootStrap在netty的应用程序中负责引导服务器和客户端.netty包含了两种不同类型的引导: 使用服务器的ServerBo ...

随机推荐

  1. 状态转移的最短路 隐式图搜索 UVA 658

    紫书365 题目大意:给你n个全都是bug的东西,然后每次可以修复,给你修复前后的状态,问最后如果能把bug全都修复,最少需要多少时间. 思路:从最初状态开始,然后枚举bug即可. 表示priorit ...

  2. cscope

    http://sourceforge.net/p/cscope/bugs/247/ buffer read only? cx cq Here is a simple patch which re-en ...

  3. hibernate缓存机制(二级缓存)

    一.why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数 ...

  4. Sanatorium

    Sanatorium time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  5. 【转载】newInstance()和new()

    newInstance()和new() 在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法.通过查询Java Documentation我们会发现使用Class.fo ...

  6. m,mm,mmm的用法

    通过查看android源码目录下的build/envsetup.sh文件,可知: - m:       Makes from the top of the tree. - mm:      Build ...

  7. R语言——基本绘图函数

    通过一个综合的例子测试绘图函数 学习的内容是tigerfish老师的教程. 第一节:基本知识 用seq函数产生100位学生的学号. > num = seq(,) > num [] [] [ ...

  8. IP地址、子网掩码详解

    如何通过子网掩码划分网段 资料一: 一.缺省A.B.C类地址,子网掩码:  二.子网掩码的作用:  code:  IP地址 192.20.15.5 11000000 00010100 00001111 ...

  9. PAT1005

    水题,和中文没啥区别不说了. #include<cstdio> #include<cstdlib> #include<iostream> #include<a ...

  10. sealed、new、virtual、abstract与override 总结

    1. sealed——“断子绝孙” 密封类不能被继承.密封方法可以重写基类中的方法,但其本身不能在任何派生类中进一步重写.当应用于方法或属性时,sealed修饰符必须始终与override一起使用. ...