原文链接: http://blog.csdn.net/yudajun/article/details/8477149

udp 是一种网络通信协议,不需要客户端和服务器端建立连接即可进行通讯功能。相对于Tcp协议它有着tcp用很多优点,例如广播功能。udp的广播功能可以指定特定网段进行广播内容,而无需知道接收者是谁,只有接受者在广播范围内即可接收广播内容。其实基于这个功能可以实现一个局域网群聊室的功能。

udp广播发送有两种形式,

方式一:通过DatagramSocket实现

方式二:通过MulticastSocket 实现

方式一:demo;

1,数据发送端:

  1. import java.io.IOException;
  2. import java.net.DatagramPacket;
  3. import java.net.DatagramSocket;
  4. import java.net.InetAddress;
  5. import java.net.SocketException;
  6. import java.net.UnknownHostException;
  7. public class SendIP {
  8. public static void main(String args[]) {
  9. new SendIP().lanchApp();
  10. }
  11. private void lanchApp(){
  12. SendThread th=new SendThread();
  13. th.start();
  14. }
  15. private class SendThread extends Thread{
  16. @Override
  17. public void run() {
  18. while(true){
  19. try {
  20. Thread.sleep(1000);
  21. } catch (InterruptedException e) {
  22. e.printStackTrace();
  23. }
  24. try {
  25. BroadcastIP();
  26. } catch (Exception e) {
  27. e.printStackTrace();
  28. }
  29. }
  30. }
  31. private void BroadcastIP()throws Exception{
  32. DatagramSocket dgSocket=new DatagramSocket();
  33. byte b[]="你好,这是我发给你的消息".getBytes();
  34. DatagramPacket dgPacket=new DatagramPacket(b,b.length,InetAddress.getByName("255.255.255.255"),8989);
  35. dgSocket.send(dgPacket);
  36. dgSocket.close();
  37. System.out.println("send message is ok.");
  38. }
  39. }
  40. }

2,数据接收端:

  1. import java.net.DatagramPacket;
  2. import java.net.DatagramSocket;
  3. import java.net.SocketException;
  4. import java.util.regex.Matcher;
  5. import java.util.regex.Pattern;
  6. public class SearchIP{
  7. public static void main(String args[])throws Exception{
  8. new SearchIP().lanchApp();
  9. }
  10. private void lanchApp(){
  11. receiveThread th=new receiveThread();
  12. th.start();
  13. }
  14. private class receiveThread extends Thread{
  15. @Override
  16. public void run() {
  17. while(true){
  18. try {
  19. Thread.sleep(1000);
  20. } catch (InterruptedException e) {
  21. e.printStackTrace();
  22. }
  23. try {
  24. receiveIP();
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. }
  30. private void receiveIP() throws Exception{
  31. DatagramSocket dgSocket=new DatagramSocket(8989);
  32. byte[] by=new byte[1024];
  33. DatagramPacket packet=new DatagramPacket(by,by.length);
  34. dgSocket.receive(packet);
  35. String str=new String(packet.getData(),0,packet.getLength());
  36. System.out.println("接收到数据大小:"+str.length());
  37. System.out.println("接收到的数据为:"+str);
  38. dgSocket.close();
  39. System.out.println("recevied message is ok.");
  40. }
  41. }
  42. }

方式二demo;

1,数据发送端:

  1. import java.io.IOException;
  2. import java.net.DatagramPacket;
  3. import java.net.InetAddress;
  4. import java.net.MulticastSocket;
  5. public class MulBroadcast extends Thread{
  6. String info ="节目预告: 恭喜您中500w彩票了";
  7. int port =9898;
  8. InetAddress address;
  9. MulticastSocket socket;
  10. public MulBroadcast(){
  11. try{
  12. address=InetAddress.getByName("233.0.0.0");
  13. socket=new MulticastSocket(port);
  14. socket.setTimeToLive(1);
  15. socket.joinGroup(address);
  16. }catch(IOException e){
  17. e.printStackTrace();
  18. }
  19. }
  20. @Override   //最简单的方法也就是建立一个线程来运行
  21. public void run(){
  22. while(true){
  23. byte[] data=info.getBytes();
  24. DatagramPacket packet=new DatagramPacket(data,data.length,address,port);
  25. try {
  26. socket.send(packet);
  27. Thread.sleep(3000);
  28. } catch (Exception e) {
  29. e.printStackTrace();
  30. }
  31. System.out.println("消息已发送:");
  32. }
  33. }
  34. public static void main(String[] args){
  35. new MulBroadcast().start();
  36. }
  37. }

2,数据接收端:

  1. import java.io.IOException;
  2. import java.net.DatagramPacket;
  3. import java.net.InetAddress;
  4. import java.net.MulticastSocket;
  5. public class MulReceiverIP extends Thread{
  6. int port=9898;
  7. InetAddress group;
  8. MulticastSocket socket; //socket sends and receives the packet.
  9. DatagramPacket packet;
  10. byte[] buf=new byte[30];// If the message is longer than the packet's length, the message is truncated.
  11. public MulReceiverIP(){
  12. try {
  13. socket=new MulticastSocket(port);
  14. group=InetAddress.getByName("233.0.0.0");
  15. socket.joinGroup(group);    //加入广播组,加入group后,socket发送的数据报,可以被加入到group中的成员接收到。
  16. packet=new DatagramPacket(buf,buf.length);
  17. } catch (IOException e) {
  18. e.printStackTrace();
  19. }
  20. }
  21. @Override
  22. public void run(){
  23. while(true){
  24. try {
  25. socket.receive(packet);
  26. } catch (IOException e) {
  27. e.printStackTrace();
  28. }
  29. //      String message=new String(buf);
  30. String message=new String(packet.getData(),0,packet.getLength());//very important !!
  31. System.out.println("接受消息内容: "+message);
  32. }
  33. }
  34. public static void main(String[] args) {
  35. new MulReceiverIP().start();
  36. }
  37. }

java udp 广播的更多相关文章

  1. Android杂谈--HTC等手机接收不到UDP广播报文的解决方案

    最近遇到个问题,在android手机上发送UDP报文的时候,HTC等机型(测试用HTC new one)接收不到广播报文,而其他的samsung, huawei, xiaomi, nexus等等均没有 ...

  2. 通过UDP广播实现Android局域网Peer Discovering

    本文是对个人笔记中内容的整理,部分代码及图片来自互联网,由于不好找到原始出处,所以未加注明. 如有痛感,联系删除. 本文将介绍以下知识点: TCP与UDP的区别: 单播.多播.广播: Java中实现U ...

  3. socket udp广播和多播的简单实现

    UDP广播与多播 作者:legend QQ:1327706646 使用UDP协议进行信息的传输之前不需要建议连接.换句话说就是客户端向服务器发送信息,客户端只需要给出服务器的ip地址和端口号,然后将信 ...

  4. 利用Docker技术实现UDP广播效果(网络编程python版)

    docker的安装见官方文档 我使用的系统为Ubuntu16.04 Ubuntu系统安装docker文档地址:https://docs.docker.com/engine/installation/l ...

  5. 给Hi3518e的Uboot添加UDP广播收发功能

    基于个人兴趣,决定实现一个和方案公司提供的uboot收发广播的功能.记录笔记如下. SDK版本:Hi3518E_V100R001C01SPC081 1. 由于我手头的板子的Phy是RMII模式,因此先 ...

  6. NetworkComms V3 之发送UDP广播消息

    NetworkComms网络通信框架序言 NetworkComms通信框架,是一款来自英国的c#语言编写的通信框架,历时6年研发,成熟稳定,性能可靠. NetworkComms v3目前只支持基本的U ...

  7. Java UDP网络编程 - 最简单示例

    UDP也是网络通讯中的一个重要协议,与TCP区别可参见浅谈TCP/IP 和 UDP的区别,本文就对Java UDP通讯做一个简单例子介绍 服务端: package wyf; import java.i ...

  8. [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现

    转自:http://www.cnblogs.com/zhili/archive/2012/09/03/2666974.html 上次因为时间的关系,所以把上一个专题遗留下的一个问题在本专题中和大家分享 ...

  9. c# socket udp广播

    一.广播消息 由于Tcp是有连接的,所以不能用来发送广播消息.发送广播消息,必须用到Udp,Udp可以不用建立连接而发送消息.广播消息的目的IP地址是一种特殊IP地址,称为广播地址.广播地址由IP地址 ...

随机推荐

  1. 【转】Java四种线程池的使用

    Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程.newFixe ...

  2. HTML DOM 基础知识,成为javascript晋级高手的必备手册

    一.DOM 简介,什么是 DOM? 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口. 标记语言,也称置标语言,是一种将文本( ...

  3. 使用Chrome保存网页为mht文件

    一直在使用chrome浏览器,但由于需要将部分网页保存为mht文件,却发现chrome默认不支持.chrome浏览器默认支持2种:单独的html文件,全部: 万能的chrome怎么可能保存不了mht? ...

  4. NGUI 降低drawcall

    前置说明一: Unity中的drawcall定义: 每次引擎准备数据并通知GPU的过程称为一次Draw Call. Unity(或者说基本全部图形引擎)生成一帧画面的处理过程大致能够这样简化描写叙述: ...

  5. 发现一个ReactNative大神

    传送门: RN使用技巧:http://www.jianshu.com/p/2f575cc35780 RN 进阶技巧:http://www.jianshu.com/p/b877115fff1b 亮点有: ...

  6. VIM设置代码折叠

    今天看了一下别人写的程序的源代码,发现是用vim写的,代码中有趣是用vim来折叠代码,一开始我以为是用插件的,后来上网查了查,得出以下使用方面的技巧. 1. 折叠方式 可用选项来设定折叠方式: 可在V ...

  7. 表访问方式---->全表扫描(Full Table Scans, FTS)

    全表扫描(Full Table Scans, FTS) 全表扫描是指Oracle在访问目标表里的数据时,会从该表所占用的第一个区(EXTENT)的第一个块(BLOCK)开始扫描,一直扫描到该表的高水位 ...

  8. iOS项目开发实战——学会使用TableView列表控件(四)plist读取与Section显示

    文本将会实现把数据存储到plist文件里.然后在程序中进行读取.在TableView控件中依据不同的类别显示Section. 有关TableView 的其它实现,请參考<iOS项目开发实战--学 ...

  9. poi导出excel合并单元格(包括列合并、行合并)

    1 工程所需jar包如下:commons-codec-1.5.jarcommons-logging-1.1.jarlog4j-1.2.13.jarjunit-3.8.1.jarpoi-3.9-2012 ...

  10. 基于python2【重要】怎么自行搭建简单的web服务器

    基本流程:1.需要的支持     1)python本身有SimpleHTTPServer     2)ForkStaticServer.py支持,该文件放在python7目录下     3)将希望共享 ...