我有一个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;

}

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

  1. android spp传输速度,Android蓝牙SPP连接似乎在几秒后就已经死了

    我有一个相当简单的程序,主要基于这里发布的简单蓝牙测试客户端应用程序: 我的应用程序有4个按钮,每个按钮通过蓝牙连接发送不同的数据字节. 似乎工作得很好几秒钟.建立连接,RFCOMM插座连接,并在最初 ...

  2. android网络传输数据加密,Android网络数据加密传输

    在移动应用开发中, 对于数据安全传输要求非常高, 尤其是涉及到用户财产安全的时候,都会对数据进行层层加密来确保数据的安全性 完整性; `在这里演示:我将演示银行在移动应用上的数据加密; 传输的数据格式 ...

  3. 与android虚拟机传输文件,android 在本机和虚拟机设备之间复制文件

    可以使用 adb push 命令从本机复制文件到设备中, 使用adb pull 命令从设备复制文件到本机中 首先要通过命令行进入 android sdk目录下的platform-tools目录 例如我 ...

  4. android手机传输,智能手机怎么传文件 安卓手机怎么传文件 安卓手机文件传输方法集合...

    智能手机的功能多了,也会造成一个麻烦,就是需要越来越多种类的文件,文件容量越来越大,跟电脑或者其他手机倒起来也会相对麻烦,就拿苹果手机来说,如果要用手机和电脑相互间传一些东西的话,就需要电脑端有iTu ...

  5. Android如何实现TCP和UDP传输

    TCP和UDP在网络传输中非常重要,在Android开发中同样重要. 首先我们来看一下什么是TCP和UDP. 什么是TCP? TCP:Transmission Control Protocol 传输控 ...

  6. UDP传输rtp数据包丢帧

    udp丢包情况: 1.连续发送数据包太快 (每发一包数据usleep(40)); 2.发送数据包太长 (数据进行切割成1400byte发送): 3.接收端处理时间过长导致丢包:调用recv方法接收端收 ...

  7. python udp 丢包_TFTP 使用不关心丢包的 UDP 传输,它是怎么保证数据的完整性的?...

    最好的分析协议方法,不是文字,而是协议分析软件,将它完整无缺展现在读者面前,读者就会豁然开朗.噢,原来是这样... 为了回答这个问题,作者做了一个小实验.用TFTP传输了一个小文件,并用wiresha ...

  8. UDP传输报文大小详解

    UDP的传输方式:面向报文 面向报文的传输方式决定了UDP的数据发送方式是一份一份的,也就是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文.那么UDP的报文大小由哪些影响因素呢?UD ...

  9. UDP传输大量数据的性能优化

    在做一个UDP传输视频数据的项目时,数据码率波动在10Mbps~100Mbps,平均在60Mbps,遇到接收端存在丢包问题,通过下面的方法可以解决. 步骤1.修改socket的缓冲区大小 默认的soc ...

最新文章

  1. PHP对redis操作详解
  2. 51 NOD 1363 最小公倍数之和 (欧拉函数思维应用)
  3. 软工团队 - 系统设计
  4. mysql教程qt linux_一步步学Qt,第四天-Linux 下mysql数据库链接
  5. 4.3 深层网络中的前向传播
  6. 高温保护_耐高温保护膜可以用在哪一方面?
  7. java配环境变量_用于 Java 开发的配置工具 Simple Configuration Facade
  8. 软件程序设计中的N-S图、PAD图、程序流程图、E-R图
  9. 计算机找不到ac97前面板怎么办,Win7前面板没有声音的解决方法(声卡设置+前面板插线)...
  10. im2col的原理和实现
  11. Kubernetes快速入门
  12. GaRy-Liang的linux成长日记8-RAID阵列
  13. 计算机中职作文,中职作文题目
  14. JAVA后端工程师笔试题-避坑公司
  15. 2022高处安装、维护、拆除考试题库及模拟考试
  16. Unity场景渲染之自发光材质
  17. 红星美羚育儿经:宝宝上火,是奶粉的祸?
  18. python求极限_数学——函数极限知识以及sympy库的limit
  19. 使用Python的turtle画五环
  20. 小程序外包公司有哪些选择参考标准?

热门文章

  1. Apache Derby数据库JVM安全策略
  2. Java的Kafka:构建安全,可扩展的消息传递应用程序
  3. ClassNotFoundException:是否会减慢您的JVM?
  4. Apache Ant 1.10.6发布–用于junitlauncher的fork模式以及新的jmod和链接任务
  5. JavaFX的科幻用户界面第1部分
  6. 特性和混入不是面向对象的
  7. 驳斥5条普通流Tropes
  8. adf平稳性检测_ADF声明性组件示例
  9. 增压的jstack:如何以100mph的速度调试服务器
  10. 使用Spring Security的多租户应用程序的无状态会话