android+udp传输大小,Android UDP数据包如何接收可变大小的数据包

我有一个Android应用程序,它监视UDP数据包并调用一个方法来处理收到的消息。我有一个问题,如果传入的消息更长,它将调用方法来处理消息。但是如果传入的消息较短,则不会调用该方法,但如果我发送短消息两次,它将被处理或在长消息后立即发送短消息,它将被处理。我该如何解决?我需要处理短消息和长消息。

UDP接收代码,用于调用长消息的方法,但不能用于短消息;

class Server extends Thread {

@Override

public void run() {

try {

int port = 8888;

// Create a socket to listen on the port.

dsocket = new DatagramSocket(port);

// Create a buffer to read datagrams into.

byte[] buffer = new byte[100];

// Create a packet to receive data into the buffer

DatagramPacket packet = new DatagramPacket(buffer, uffer.length);

while (true) {

try {

// Wait to receive a datagram

dsocket.receive(packet);

//Convert the contents to a string,

String msg = new String(buffer, packet.getOffset(), packet.getLength());

if (msg !=null)

{

call(msg);

msg=null;

}

// Reset the length of the packet before reusing it.

packet.setLength(buffer.length);

} catch (Exception e) {

dsocket.close();

break; }

}

} catch (Exception e) {

dsocket.close(); e.printStackTrace();}

}

}

public void call(String mg) {

int v;

int sq=0; // store squence no of the calls

int indxs=0; // start alarm msg index

boolean fnd; // alarm msg filter flg

char Sqchar1; // squnce no of the call

char Sqchar2; // squnce no of the call

char Sqchar3; // squnce no of the call

int pospri; // default position 8 of priority for one digit seqence no

String pstr = null; // alarm msg string without filter

boolean aflg =false; // alarm msg found flg becomes true

boolean retval = false; // stop same active sequence msg

int sqnum; // defualt sq to one digit

int lstr = mg.length();

int indxe= lstr; // end alarm msg index

// typica string mg = 145 ($\M A 1 5 "bla bla")// valid alarm msg

// typical string mg = 88 ($\M A 12 6 "bla bla")// valid alarm msg

// typical string mg = 127 ($\M A 123 1 "bla bla")// valid alarm msg

// typical string mg = 1111 ($\M A 130 2 "bla bla")// valid alarm msg

// typical string mg = 148 ($\M N 1)// valid CANCEL msg

// typical string mg = 90 ($\M N 12)// valid CANCEL msg

// typical string mg = 130 ($\M N 123)// valid CANCEL msg

// typical string mg = 1115 ($\M N 130)// valid CANCEL msg

// NON Valid string mg = 456

// NON Valid string mg = 113 ($\C x n " bla bla")

//serach for alarm string

for(int i=0; i< lstr; i++)

{

char schar = mg.charAt(i);

if(schar=='$')

{

rHandler.post(rRunnable);

pstr = mg.substring(i, (lstr-1));

aflg =true; break;

}

}

if(aflg)

{

char achar = pstr.charAt(2); // indicateas alarm msg

char ACchar = pstr.charAt(4); // indicateas alarm active

if(achar =='M' && ACchar == 'A')

{

Sqchar1= pstr.charAt(6);

if(pstr.charAt(7)!=' ')

{

sqnum=2;

Sqchar2= pstr.charAt(7);

pospri = 9;

}

else

{

sqnum=1;

Sqchar2=' ';

pospri = 8;

sq = Character.getNumericValue(Sqchar1);

}

if(sqnum==2)

{

if(pstr.charAt(8)!=' ')

{

//squnum =3

pospri = 10;

Sqchar3= pstr.charAt(8);

int sq1 = Character.getNumericValue(Sqchar1);

int sq2 = Character.getNumericValue(Sqchar2);

int sq3 = Character.getNumericValue(Sqchar3);

sq= (sq1 * 100) + (sq2 * 10) + sq3;

}

else

{

int sq1 = Character.getNumericValue(Sqchar1);

int sq2 = Character.getNumericValue(Sqchar2);

sq= (sq1 *10) + sq2;

pospri = 9;

}

}

int plen = pstr.length();

fnd=false;

for(int x=0; x

{

char ichar = pstr.charAt(x);

if( ichar== '"' && !fnd )

{

indxs = x+1; fnd = true;

}

else

if(ichar == '"' && fnd)

{

indxe = x; break;

}

}

String amsg = pstr.substring(indxs, indxe);

// stop repetated msgs

if(sqlist[sq]== sq)

{

retval = true;

}

if (!retval)

{

sqlist[sq] = sq;

alarmlist[sq] = amsg;

clrlist[sq]=Character.toString(pstr.charAt(pospri));

sound(clrlist[sq]); tHandler.post(tRunnable);

}

}

else

if(achar =='M'&& ACchar == 'N')

{

int clen =pstr.length();

if(clen ==7 )

{

Sqchar1= pstr.charAt(6);

sq= Character.getNumericValue(Sqchar1);

}

else

if(clen ==8 )

{

Sqchar1= pstr.charAt(6);

Sqchar2= pstr.charAt(7);

int sq1 = Character.getNumericValue(Sqchar1);

int sq2 = Character.getNumericValue(Sqchar2);

sq= (sq1 * 10) + sq2;

}

else

if(clen ==9 )

{

Sqchar1= pstr.charAt(6);

Sqchar2= pstr.charAt(7);

Sqchar3= pstr.charAt(8);

int sq1 = Character.getNumericValue(Sqchar1);

int sq2 = Character.getNumericValue(Sqchar2);

int sq3 = Character.getNumericValue(Sqchar3);

sq= (sq1 * 100) + (sq2 * 10) + sq3;

}

sqlist[sq] = 0;

alarmlist[sq] = null;

clrlist[sq]= null; cHandler.post(cRunnable);

}

else

{

return;

}

list.clear();

int elementsCount = alarmlist.length;

v=0;

for(int i=0; i < elementsCount; i++)

{

String disp =alarmlist[i];

if(disp != null)

{

list.add(v, disp+ "#" + clrlist[i]);

v++;

}

}

write(list, "/mnt/sdcard/msg.tmp"); dHandler.post(dRunnable);

} //alarm msg

return;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单例模式引发的内存泄漏:_资源泄漏:救援的命令模式

单例模式引发的内存泄漏:多年来&#xff0c; 使用Plumbr进行性能监控时&#xff0c;我遇到了数百个资源泄漏引起的性能问题。 在这篇文章中&#xff0c;我想描述一种最简单的方法来清理资源并避免该问题。 首先&#xff0c;我以电影播放器​​应用程序为例来描述问题。 这种应…

使用 ssh 命令来访问(登录/连接)远程服务器主机

打开 terminal 客户端&#xff0c;输入如下命令语句&#xff1a; ssh root119.119.10.5; // ssh 登录用户名称远程主机IP地址

android json 斜杠,Android中Json数据去掉斜杠

数据如下&#xff1a;["{"STCD":"172017156159","ItemID":"0003002","TM":"2020-01-16 19:20:10","NFOINDEX":0,"DATAVALUE":0,"DATATYPE":0}","{"STCD"…

ant构建项目迁移到gradle_Gradle这么弱还跑来面腾讯?

点击上方“刘望舒”&#xff0c;选择“星标”多点在看&#xff0c;就是真爱作者: 厘米姑娘(腾讯开发妹子)| 来源 &#xff1a;公号 码个蛋https://www.jianshu.com/p/1274c1f1b6a4前言在使用Android Studio过程中没少被Gradle坑过&#xff0c;虽然网上有很多简单粗暴的解决方案…

java heroku_使用Spring Boot和Heroku在20分钟内完成Java的单点登录

java heroku建筑物身份管理&#xff0c;包括身份验证和授权&#xff1f; 尝试Stormpath&#xff01; 我们的REST API和强大的Java SDK支持可以消除您的安全风险&#xff0c;并且可以在几分钟内实现。 注册 &#xff0c;再也不会建立auth了&#xff01; 大规模更新 我最初为本文…

如何使用SSH客户端远程操作linux系统,并启动、关闭tomcat和查看后台日志

cd … 表示回退到上一级目录 ls 表示查看当前目录下的所有文件 我们的tomcat安装路径在usr\local\yzmis\下面找 例如你要关闭信誉质量考核系统所在的tomcat&#xff0c;你要进入test下去找到apache-tomcat-6.0.14 再进入bin目录下&#xff0c;然后执行[trserver100 bin]$ ./sh…

极光推送android点击跳转页面,app关闭时点击推送消息实现页面跳转

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {//推送注册var str:NSString UIDevice.currentDevice().systemVersionvar version:Float str.floatValueif version > 8.0 {APService…

模块pdf2image.dll加载失败_Webpack 原理从前端模块化开始

当前主流 JS 模块化方案无模块化CommonJS 规范&#xff0c;nodejs 实现的规范AMD 规范&#xff0c;requirejs 实现的规范CMD 规范&#xff0c;seajs 实现的规范&#xff0c; seajs 与 requirejs 实现原理有很多相似的地方 u ES Modules&#xff0c;当前 js 标准模块化方案注意:…

drools dmn_Drools 7支持DMN(决策模型和表示法)

drools dmn决策模型和表示法&#xff08;DMN&#xff09;规范是OMG&#xff08;对象管理组&#xff09;相对较新的标准&#xff0c;旨在为业务规则和业务决策提供服务。 BPMN&#xff08;它的兄弟规范&#xff09;用于业务流程&#xff1a;标准化表示法和执行语义&#xff0c;…

ios html正则表达式,ios 正则表达式去html标签

ios 正则表达式去html标签[2021-01-27 12:53:55] 简介:php正则表达式去掉html的方法&#xff1a;首先使用“htmlspecialchars_decode” 将特殊的HTML实体转换回普通字符&#xff1b;然后通过正则表达式“preg_replace(/]>/,,$_st系统运维正则表达式概述基础正则表达式扩展正…

PL/SQL工具执行SQL脚本文件

方法一&#xff1a;在命令窗口中输入SQL>E:\prestigereport.sql 方法二&#xff1a;工具菜单下的【导入表】&#xff0c;选择SQL插入后选中需要导入的sql脚本文件。

java开发五年面试经验_只有经验丰富的开发人员才能教您有关Java的5件事

java开发五年面试经验深入研究Java之前需要了解的所有内容的概述 有许多工具&#xff0c;方法&#xff0c;环境和功能会改变您处理代码的方式&#xff0c;而这些通常是在学年期间不会遇到的。 虽然它在Java开发世界中迈出了第一步&#xff0c;但大多数实际学习都是在工作中进行…

python合并excel工作簿_Python合并多个Excel工作簿

# -*- coding: utf-8 -*- #导入需要使用的包 import xlrd #读取Excel文件的包 import xlsxwriter #将文件写入Excel的包 #打开一个excel文件 def open_xls(file): f xlrd.open_workbook(file) return f #获取excel中所有的sheet表 def getsheet(f): return f.sheets() #获取sh…

中间表、关系表、关联表

中间表关系表关联表&#xff0c;保存表与表之间的记录&#xff08;数据&#xff09;对应关系&#xff0c;表保存的基本上是ID值&#xff0c;如果还保存其它的数据就不能认为是关系表&#xff0c;而且也无法真正体现数据记录之间的对应关系。

neo4j 两个点创建关系_Neo4j:找到两个纬度/经度之间的中间点

neo4j 两个点创建关系昨天我写了一篇博客文章&#xff0c;展示了如何使用Cypher查找两个纬度/经度之间的中点&#xff0c;这是第一次尝试填补缺失位置时的效果&#xff0c;但是我意识到我可以做得更好。 正如我在上一篇文章中提到的&#xff0c;当我找到一个缺少经纬度坐标的停…

c++调用cplex求解例子_视频教程 | 用Python玩转运筹优化求解器IBM CPLEX(二)

编者按优化求解器对于做运筹学应用的学生来说&#xff0c;意义重大。然而直到今天&#xff0c;放眼望去&#xff0c;全网&#xff08;包括墙外&#xff09;几乎没有一个系统的Cplex中文求解器教程。作为华人运筹学的最大的社区&#xff0c;『运筹OR帷幄』 责无旁贷&#xff0c;…

常用 ORACLE 函数的解读

文章目录substr()&#xff0c;截取源字符串中的字符串rtrim()&#xff0c;将源字符串右边指定的字符删除ltrim()&#xff0c;将源字符串左边指定的字符删除instr()&#xff0c;返回指定字符串在源字符串中的检索位置decode()&#xff0c;条件判断函数rpad()&#xff0c;从右边对…

markdown 行内公式_如何轻松将笔记转为思维导图(Word、Markdown)

目录简介Markdown -> XMindWord -> XMind简介思维导图是一种一种图像式思维的工具&#xff0c;便于我们理解知识之间的逻辑关系。在我们的学习、生活中&#xff0c;我们习惯于使用word、markdown等笔记软件&#xff0c;而较少的使用思维导图。其实&#xff0c;有些时候我…

apache.camel_Apache Camel 2.18发布–包含内容

apache.camel本周发布了Apache Camel 2.18.0 。 此版本是重要版本&#xff0c;我将在此博客文章中重点介绍。 Java 8 Camel 2.18是第一个需要Java 1.8的版本&#xff08;例如&#xff0c;容易记住的Camel 2.18 Java1.8。Camel2.17 Java 1.7&#xff09;。 我们采取了谨慎的…