java udp 广播
原文链接: http://blog.csdn.net/yudajun/article/details/8477149
udp 是一种网络通信协议,不需要客户端和服务器端建立连接即可进行通讯功能。相对于Tcp协议它有着tcp用很多优点,例如广播功能。udp的广播功能可以指定特定网段进行广播内容,而无需知道接收者是谁,只有接受者在广播范围内即可接收广播内容。其实基于这个功能可以实现一个局域网群聊室的功能。
udp广播发送有两种形式,
方式一:通过DatagramSocket实现
方式二:通过MulticastSocket 实现
方式一:demo;
1,数据发送端:
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- import java.net.SocketException;
- import java.net.UnknownHostException;
- public class SendIP {
- public static void main(String args[]) {
- new SendIP().lanchApp();
- }
- private void lanchApp(){
- SendThread th=new SendThread();
- th.start();
- }
- private class SendThread extends Thread{
- @Override
- public void run() {
- while(true){
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- try {
- BroadcastIP();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- private void BroadcastIP()throws Exception{
- DatagramSocket dgSocket=new DatagramSocket();
- byte b[]="你好,这是我发给你的消息".getBytes();
- DatagramPacket dgPacket=new DatagramPacket(b,b.length,InetAddress.getByName("255.255.255.255"),8989);
- dgSocket.send(dgPacket);
- dgSocket.close();
- System.out.println("send message is ok.");
- }
- }
- }
2,数据接收端:
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.SocketException;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class SearchIP{
- public static void main(String args[])throws Exception{
- new SearchIP().lanchApp();
- }
- private void lanchApp(){
- receiveThread th=new receiveThread();
- th.start();
- }
- private class receiveThread extends Thread{
- @Override
- public void run() {
- while(true){
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- try {
- receiveIP();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- private void receiveIP() throws Exception{
- DatagramSocket dgSocket=new DatagramSocket(8989);
- byte[] by=new byte[1024];
- DatagramPacket packet=new DatagramPacket(by,by.length);
- dgSocket.receive(packet);
- String str=new String(packet.getData(),0,packet.getLength());
- System.out.println("接收到数据大小:"+str.length());
- System.out.println("接收到的数据为:"+str);
- dgSocket.close();
- System.out.println("recevied message is ok.");
- }
- }
- }
方式二demo;
1,数据发送端:
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.InetAddress;
- import java.net.MulticastSocket;
- public class MulBroadcast extends Thread{
- String info ="节目预告: 恭喜您中500w彩票了";
- int port =9898;
- InetAddress address;
- MulticastSocket socket;
- public MulBroadcast(){
- try{
- address=InetAddress.getByName("233.0.0.0");
- socket=new MulticastSocket(port);
- socket.setTimeToLive(1);
- socket.joinGroup(address);
- }catch(IOException e){
- e.printStackTrace();
- }
- }
- @Override //最简单的方法也就是建立一个线程来运行
- public void run(){
- while(true){
- byte[] data=info.getBytes();
- DatagramPacket packet=new DatagramPacket(data,data.length,address,port);
- try {
- socket.send(packet);
- Thread.sleep(3000);
- } catch (Exception e) {
- e.printStackTrace();
- }
- System.out.println("消息已发送:");
- }
- }
- public static void main(String[] args){
- new MulBroadcast().start();
- }
- }
2,数据接收端:
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.InetAddress;
- import java.net.MulticastSocket;
- public class MulReceiverIP extends Thread{
- int port=9898;
- InetAddress group;
- MulticastSocket socket; //socket sends and receives the packet.
- DatagramPacket packet;
- byte[] buf=new byte[30];// If the message is longer than the packet's length, the message is truncated.
- public MulReceiverIP(){
- try {
- socket=new MulticastSocket(port);
- group=InetAddress.getByName("233.0.0.0");
- socket.joinGroup(group); //加入广播组,加入group后,socket发送的数据报,可以被加入到group中的成员接收到。
- packet=new DatagramPacket(buf,buf.length);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void run(){
- while(true){
- try {
- socket.receive(packet);
- } catch (IOException e) {
- e.printStackTrace();
- }
- // String message=new String(buf);
- String message=new String(packet.getData(),0,packet.getLength());//very important !!
- System.out.println("接受消息内容: "+message);
- }
- }
- public static void main(String[] args) {
- new MulReceiverIP().start();
- }
- }
java udp 广播的更多相关文章
- Android杂谈--HTC等手机接收不到UDP广播报文的解决方案
最近遇到个问题,在android手机上发送UDP报文的时候,HTC等机型(测试用HTC new one)接收不到广播报文,而其他的samsung, huawei, xiaomi, nexus等等均没有 ...
- 通过UDP广播实现Android局域网Peer Discovering
本文是对个人笔记中内容的整理,部分代码及图片来自互联网,由于不好找到原始出处,所以未加注明. 如有痛感,联系删除. 本文将介绍以下知识点: TCP与UDP的区别: 单播.多播.广播: Java中实现U ...
- socket udp广播和多播的简单实现
UDP广播与多播 作者:legend QQ:1327706646 使用UDP协议进行信息的传输之前不需要建议连接.换句话说就是客户端向服务器发送信息,客户端只需要给出服务器的ip地址和端口号,然后将信 ...
- 利用Docker技术实现UDP广播效果(网络编程python版)
docker的安装见官方文档 我使用的系统为Ubuntu16.04 Ubuntu系统安装docker文档地址:https://docs.docker.com/engine/installation/l ...
- 给Hi3518e的Uboot添加UDP广播收发功能
基于个人兴趣,决定实现一个和方案公司提供的uboot收发广播的功能.记录笔记如下. SDK版本:Hi3518E_V100R001C01SPC081 1. 由于我手头的板子的Phy是RMII模式,因此先 ...
- NetworkComms V3 之发送UDP广播消息
NetworkComms网络通信框架序言 NetworkComms通信框架,是一款来自英国的c#语言编写的通信框架,历时6年研发,成熟稳定,性能可靠. NetworkComms v3目前只支持基本的U ...
- Java UDP网络编程 - 最简单示例
UDP也是网络通讯中的一个重要协议,与TCP区别可参见浅谈TCP/IP 和 UDP的区别,本文就对Java UDP通讯做一个简单例子介绍 服务端: package wyf; import java.i ...
- [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现
转自:http://www.cnblogs.com/zhili/archive/2012/09/03/2666974.html 上次因为时间的关系,所以把上一个专题遗留下的一个问题在本专题中和大家分享 ...
- c# socket udp广播
一.广播消息 由于Tcp是有连接的,所以不能用来发送广播消息.发送广播消息,必须用到Udp,Udp可以不用建立连接而发送消息.广播消息的目的IP地址是一种特殊IP地址,称为广播地址.广播地址由IP地址 ...
随机推荐
- Solidworks如何在零件表面贴图
在要增加图片的表面上右击,然后选择修改这个面的颜色(可以是曲面) 切换到高级,然后选择一个图片 你可以缩放图片的大小,从而决定图片的重复次数 如果图片上下或者左右颠倒了,可以在映射里面勾选 ...
- SQL到NoSQL概览性总结之一 数据库应用场景选型
数据库类型与实例 适合场景 不适合场景 场景举例 关系数据库 基于集合理论,具有行和列的二维表,严格使用类型 开源MySQL/MariaDB, PostgreSQL 商业:Oracle,DB2,SQL ...
- javascript constrator and prototype
揭开js之constructor属性的神秘面纱 在js里面当new了一个对象时,这中间发生了什么? MDN - new运算符 当代码 new foo(...) 执行时: 一个新对象被创建.它继承自fo ...
- Android下雪动画的实现
原文链接 : Snowfall 原文作者 : Styling Android 译文出自 : hanks.xyz 译者 : hanks-zyh 校对者: desmond1121 状态 : 完毕 这本是一 ...
- 修改Ubuntu默认运行级别,启动字符界面
Ubuntu的默认开机的runlevel是2,可以用runlevel来查看当前的默认运行级别. debian系(ubuntu是基于debian)的Linux一直是用runlevel 2来默认启动,并且 ...
- V-rep学习笔记:Reflexxes Motion Library 3
路径规划 VS 轨迹规划 轨迹规划的目的是将输入的简单任务描述变为详细的运动轨迹描述.注意轨迹和路径的区别:Trajectory refers to a time history of positio ...
- 使用jquery的ajax提交文件上传
以前的项目大多的使用jquery的插件来进行文件上传,对于就只引用jquery而不使用插件来上传文件之前未有写过,最近项目里有写到和用到,就记录一下,以后方便查找. 提示:存在浏览器皆容问题,谨慎使用 ...
- django之创建第8-3个项目-数据库数据提取之高级操作
1.配置test2.html <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- urlencode编码问题(以及urlparse)
# -*- coding: cp936 -*- #python 27 #xiaodeng #urlencode编码问题(以及urlparse) import sys, urllib def urlen ...
- PLSQL创建DBLINK
Oracle创建dblink,多用于数据的同步机制.不建议直接用dblink对数据库频繁的操作... 00.查看创建dblink权限 select * from user_sys_privs t wh ...