日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發布時間:2023/12/3 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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;

}

總結

以上是生活随笔為你收集整理的android+udp传输大小,Android UDP数据包如何接收可变大小的数据包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。