Java监听和发送飞秋群消息
背景
应用背景。公司内网使用飞秋通讯,平台的一些消息推送到飞秋群里,更加直观,方便处理
技术分析
编码
监听群消息
/*** 监听整个组播地址内的群消息*/public static void listenGroupMsg() {MulticastSocket msr = null;try {InetAddress group = InetAddress.getByName(DEFAULT_BROADCASE_IP);msr = new MulticastSocket(DEFAULT_BROADCASE_PORT);msr.joinGroup(group);byte[] buf = new byte[1024];while (true) {DatagramPacket dp = new DatagramPacket(buf, buf.length);msr.receive(dp);GroupMsg groupMsg = getGroupMsg(dp.getData());if (groupMsg != null) {System.out.println(groupMsg.toString());}}} catch (Exception e) {e.printStackTrace();} finally {if (msr != null) {msr.close();}}}private static GroupMsg getGroupMsg(byte[] data) throws Exception {if (!isGroupMsgType(data)) {return null;}//整个消息类似于这种格式//1_lbt6_0#128#080027090471#0#0#96#4001#9:1466349191:vitrual:VB:4194339:晠8q凗梢舔�}J=R�B騪N�h1'r熜�=猙熇YC翝�2�酒f*膭h鋮String mac = getGroupMac(data);String userName = getUserName(data);String pcName = getPcName(data);byte[] encryData = getEncryData(data, getEncryDataLength(data));if (encryData == null) {return null;}byte[] decryData = decrypt(mac, encryData);//从消息体中获取群号和消息内容//QUNMSGMARK#3b199b07_24901708#/:bomb{/font;-16 0 0 0 400 0 0 0 134 0 0 2 32 微软雅黑 8404992;}String msgBody = new String(decryData, DEFAULT_ENCODING);GroupMsg groupMsg = new GroupMsg();groupMsg.setMac(mac);groupMsg.setUserName(userName);groupMsg.setPcName(pcName);groupMsg.setTime(DateUtil.getFormatTime(new Date()));if (msgBody.indexOf("#") > 0 && msgBody.indexOf("_") > 0) {groupMsg.setGroupNum(Long.valueOf(msgBody.substring(msgBody.indexOf("#") + 1, msgBody.indexOf("_")), 16));msgBody = msgBody.substring(msgBody.indexOf("_"));}if (msgBody.lastIndexOf("{") > 0 && msgBody.indexOf("#") > 0) {groupMsg.setMsg(msgBody.substring(msgBody.indexOf("#") + 1, msgBody.lastIndexOf("{")));}return groupMsg;}
发送群消息
/*** 向指定群,发送群消息** @param groupNum* @param msg* @param userName* @param pcName* @param mac*/public static void sendGroupMsg(long groupNum, String msg, String userName, String pcName, String mac) {try {InetAddress group = InetAddress.getByName(DEFAULT_BROADCASE_IP);MulticastSocket msr = new MulticastSocket(DEFAULT_BROADCASE_PORT);msr.joinGroup(group);byte[] sendData = getSendData(groupNum, msg, userName, pcName, mac);DatagramPacket dp = new DatagramPacket(sendData, sendData.length, group, DEFAULT_BROADCASE_PORT);msr.send(dp);msr.close();} catch (Exception e) {e.printStackTrace();}}private static byte[] getSendData(long groupNum, String msg, String userName, String pcName, String mac) throws Exception {byte[] groupData = String.format("QUNMSGMARK#%s_%d#%s%s", Long.toHexString(groupNum), (System.currentTimeMillis() / 1000), msg, DEFAULT_FONT).getBytes(DEFAULT_ENCODING);byte[] groupEncryptData = encrypt(mac, groupData);byte[] headData = String.format("1_lbt4_0#128#%s#0#0#%d#4000#9:%d:%s:%s:%d:", mac, groupEncryptData.length, (System.currentTimeMillis() / 1000), pcName, userName, MSG_TYPE_GROUP).getBytes(DEFAULT_ENCODING);byte[] fullData = new byte[headData.length + groupEncryptData.length];System.arraycopy(headData, 0, fullData, 0, headData.length);System.arraycopy(groupEncryptData, 0, fullData, headData.length, groupEncryptData.length);return fullData;}
测试结果
Java监听和发送飞秋群消息相关推荐
- java监听短信_Android上监听收到的短信(SMS)
Android SDK1.1 验证可行. 1.实现一个Receiver[收到的是PDU,需要从PDU中还原出SMSMessage] Java代码 public void onReceive(Conte ...
- 使用Java监听网络流量
使用 JPCAP抓包,可以使用JAVA写代码对数据进行分析,最后可视化显示; 本文只实现了使用 Java语言的jpcap接口 在 IDEA环境下抓取数据包的功能 一.Java搭建 winpcap开发环 ...
- Android监听SMS发送状态并获取短信服务中心号码
监听SMS发送状态的例子网上虽然有,但还是太杂了不完全.自己写了个. 短信服务中心号码的获取是通过SmsMessage.getServiceCenterAddress()方法获得.也就是只能从已经存储 ...
- java swing列表数据加监听,【Java Swing公开课|Java监听列表项选择事件怎么用,看完这篇文章你一定就会了】- 环球网校...
[摘要]作为一门面向对象编程语言,Java吸收了C++语言的优点,也展现了其强大的一面,我们能在各个地方看到其功能强大和简单易用的两个特征,当然,也吸引了很多程序员的注意力,所以就有人想了解Java的 ...
- android融云监听消息,关于android:融云-IMkit-拦截或监听所有发送消息
融云 IMkit 拦挡或监听所有发送音讯 最近集成融云 IMkit 的 SDK, 有一个需要是要监听所有收回去的音讯, 依据音讯类型拦挡或者进行批改. 在官网文档上着了一遍, 都没有找到, 偶尔在看 ...
- java 监听控制台输入
分享一下我写的java监听控制台输入并可以给出响应的功能. 很多时候需要监听控制台的输入内容,相当于信号监听,根据输入的内容做出相应的动作,这里给出我的一个简单实现. 要注意的是:监听得到的消息中前后 ...
- Java监听mysql的binlog详解(mysql-binlog-connector)
Java监听mysql的binlog详解(mysql-binlog-connector) 1. 需求概述 2. 技术选型 3. 方案设计 3.环境准备 3.1 查看是否开启binlog 3.2 mys ...
- java监听某端口和ip_Java 通过Socket监听指定服务器(IP)的指定端口,及向指定服务器的指定端口发送信息...
客户端:向指定端口发送信息 package com.jszc.lottery.modules.longpay.util; import java.io.BufferedReader; import j ...
- java监听变量的变化_[Java学习小记]使用PropertyChangeSupport来监听变量的变化
最近开始要着手写一个web项目 ,之前没怎么 写过Java ,所以觉得蛮有必要把每天学习到的一些知识点或者解决的一些问题给记录下来 .一来供自己在整理过程中掌握巩固,二来也为以后再次出现该问题时能快速 ...
- java 监听队列_spring+activemq实战之配置监听多队列实现不同队列消息消费
摘选:https://my.oschina.net/u/3613230/blog/1457227 摘要: 最近在项目开发中,需要用到activemq,用的时候,发现在同一个项目中point-to-po ...
最新文章
- 记录一次自己调试代码的过程
- labVIEW与单片机实现串口通信的设计过程
- 打开AI芯片的“万能钥匙”
- nginx发布antd-pro项目(别人发的,未测试)
- Java基于springMVC的验证码案例
- Codeforces Round #651 (Div. 2) D
- angular和JAVA实现aes、rsa加密解密,前后端交互,前端加解密和后端JAVA加解密实现
- python求第n个质数_找到第n个质数:麻木
- WPF学习笔记(数据绑定篇3)
- Spring AOP源码分析(二)JDK动态代理和CGLIB介绍
- python3生成文件对象(五分钟读懂)
- 图书馆占座系统(三)
- easyui-combobox之setText与setValue先后之分
- ASCII码表的应用
- c51单片机时钟程序汇编语言,51单片机时钟汇编程序
- 快手申请快手联盟商选商标,商标注册的申请程序有哪些?
- ROS从入门到精通3-5:blender机器人模型定制皮肤贴图
- 《网络攻防实践》第四周作业
- 海润与联合“罗生门”升级
- 关于SPWM 和SVPWM调制比和电压利用率的理解总结——基础补充(一)
热门文章
- 如何使用Visual Studio 2017建立一个C语言项目
- Java基础知识笔记整理(零基础学Java)
- 2019 互联网月饼哪家强?阿里走情怀;百度最土豪;浪潮最高冷;抖音最.........
- pass平台java,mPass 微服务开发平台
- 深度解析 mPaaS 小程序一站式研发
- 凸包算法详解(Graham扫描法)
- 软件架构及几种典型框架
- C语言 进制转换 将十进制转换为任意进制
- 项目管理工具project软件学习(四) - 日历保存为模板、日历重命名、删除
- Linux系统之备份与恢复