UDP:
无连接协议
udp协议发送数据,用的是数据报包的形式。(64KB以内)
 
 
发送端:
1.定义发送的datagramsocket对象,发送端可以不用定义端口
2.定义封装数据包datagrampacket
3.发送数据包
4.关闭资源
 
//InetAddress.getByName("192.168.3.255")必须是统一的网段
 
public class UdpSendThread implements Runnable {

	DatagramSocket ds;
byte[] buf; public UdpSendThread(DatagramSocket ds) {
this.ds = ds;
} public UdpSendThread(DatagramSocket ds, String str) { this.ds = ds;
this.buf = str.getBytes();
} @Override
public void run() { String brStr;
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in, "utf-8")); while ((brStr = br.readLine()) != null) { if(brStr.startsWith("@")){ } DatagramPacket dp = new DatagramPacket(brStr.getBytes(), brStr.getBytes().length,
InetAddress.getByName("192.168.3.255"), 9000); ds.send(dp);
if (brStr.equals("over")) {
break;
} } //br.close();
ds.close();
} catch (UnknownHostException | UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

  

接收端:
1、建立DatagramSocket对象
2、定义一个空的数据包
3、接受数据包
4、解析数据包
5、关闭资源
public class UdpRececiveThread extends Thread {

	DatagramSocket ds;

	public UdpRececiveThread(DatagramSocket ds) {

		this.ds = ds;
} @Override
public void run() { while(true){
byte[] buf = new byte[1024*1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length); try {
ds.receive(dp);
String ip = dp.getAddress().getHostAddress();
String content = new String(dp.getData(),0,dp.getLength());
if(content.equals("over")){
System.out.println(ip+"退出");
} System.out.println(ip+":"+content); } catch (IOException e) {
e.printStackTrace();
} }
}
}

  测试类:

	public static void main(String[] args) throws SocketException {

		DatagramSocket sendDs = new DatagramSocket();
DatagramSocket reDs = new DatagramSocket(9000);
new Thread(new UdpSendThread(sendDs)).start();;
new UdpRececiveThread(reDs).start();
}

  

udp 局域网群聊的更多相关文章

  1. java 网络编程之UDP通信和简单的群聊程序

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  2. JAVA 网络编程 - 实现 群聊 程序

    在实现 这个 程序之前, 我们 需要 了解 一些 关于 Java 网络 编程 的 知识. 基本 的 网络知识: 网络模型 OSI (Open System Interconnection 开放系统互连 ...

  3. Java-->实现群聊功能(C/S模式--TCP协议)

    --> Java 对TCP协议的支持: --> java.net包中定义了两个类ServerSocket 和Socket ,分别用来实现双向连接的server 端和client 端. -- ...

  4. 一套高可用、易伸缩、高并发的IM群聊架构方案设计实践

    本文原题为“一套高可用群聊消息系统实现”,由作者“于雨氏”授权整理和发布,内容有些许改动,作者博客地址:alexstocks.github.io.应作者要求,如需转载,请联系作者获得授权. 一.引言 ...

  5. 群聊(udp)

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  6. UDP局域网通信的Java实现及Android平台尝试

    局域网通信已经很少被他人所提及了,我曾经还尝试过通过蓝牙构建通信网络,这次有机会尝试UDP局域网通信,在这里把一些基本过程和在Android平台上的问题记录一下. 1. UDP基础知识 1.1 什么是 ...

  7. [Python 网络编程] TCP编程/群聊服务端 (二)

    群聊服务端 需求分析: 1. 群聊服务端需支持启动和停止(清理资源); 2. 可以接收客户端的连接; 接收客户端发来的数据 3. 可以将每条信息分发到所有客户端 1) 先搭架子: #TCP Serve ...

  8. java基于socket的网络通信,实现一个服务端多个客户端的群聊,传输文件功能,界面使用Swing

    最近在复习java的io流及网络编程.但复习写那些样板程序总是乏味的.便准备写个项目来巩固.想来想去还是聊天项目比较好玩.如果日后完成的比较好自己也可以用(哈哈哈).并且自己后面也要继续巩固java多 ...

  9. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

随机推荐

  1. mouseover,mouseenter,mouseout,mouseleave的区别

    mouseover :不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件. mouseout :不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件. mous ...

  2. RHCSA-EXAM 模拟题目

    参考答案:http://www.cnblogs.com/venicid/category/1088924.html 请首先按找以下要求配置考试系统: * Hostname: server0.examp ...

  3. Android:反编译apk

    一.所需工具 1. apktool (1)作用:获取资源文件,例如图片.布局文件 (2)下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads ...

  4. Retinex图像增强和暗通道去雾的关系及其在hdr色调恢复上的应用

    很多人都认为retinex和暗通道去雾是八杆子都打不着的增强算法.的确,二者的理论.计算方法都完全迥异,本人直接从二者的公式入手来简单说明一下,有些部分全凭臆想,不对之处大家一起讨论. 首先,为描述方 ...

  5. 【redis的搭建】centos6.4下搭建redis

    说明:本文内容参考自一些资料,如有雷同,还请见谅. 部分参考: http://blog.csdn.net/su377486/article/details/51803616 http://blog.c ...

  6. [转]WIN2008 IIS7的日期格式

    最近项目升级服务器从32位升级到64位的WIN2008,日期显示格式非我们所期望的yyyy-M-d格式,原以为修改控制面板的日期格式即可,可是不行. 修改注册表问题解决. 修改方法: 运行注册表编辑器 ...

  7. Qt-QML-电子罗盘

    使用QML中的Canvas实现电子罗盘绘制,效果图如下 一个简单的电子罗盘,红色N极.其中中间飞机表示当前的指向, 还是比较简单的,直接上代码吧 /* 作者:张建伟 时间:2018年4月27日 简述: ...

  8. 牛客网暑期ACM多校训练营(第四场):A Ternary String(欧拉降幂)

    链接:牛客网暑期ACM多校训练营(第四场):A Ternary String 题意:给出一段数列 s,只包含 0.1.2 三种数.每秒在每个 2 后面会插入一个 1 ,每个 1 后面会插入一个 0,之 ...

  9. webpack整体配置结构

    摘自<深入浅出webpack>2.8 const path = require('path'); module.exports = { // entry 表示入口,webpack执行的第一 ...

  10. 二维DCT变换

    DCT(Discrete Consine Transform),又叫离散余弦变换,它的第二种类型,经常用于信号和图像数据的压缩.经过DCT变换后的数据能量非常集中,一般只有左上角的数值是非零的,也就是 ...