您的位置:首页 > 移动开发 > Android开发

Android的udp回显测试源码

2016-05-13 18:02 615 查看
private DatagramSocket server = null;
private DatagramPacket recvPacket = null;
private DatagramPacket sendPacket = null;
private byte[] buffer = new byte[1024];

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Runnable r = new Runnable() {
public void run() {
try {
server = new DatagramSocket(1235);
recvPacket = new DatagramPacket(buffer, buffer.length);
} catch (SocketException e) {
e.printStackTrace();
}

while (true) {
try {
server.receive(recvPacket);
String dat = new String(recvPacket.getData(), 0, recvPacket.getLength(), "gb2312");
Log.i("chenqy", "recv:" + dat);
sendPacket = new DatagramPacket(dat.getBytes(),dat.getBytes().length,
recvPacket.getAddress(),recvPacket.getPort());
server.send(sendPacket);

} catch (IOException e) {
e.printStackTrace();
}
}
}
};

Thread t = new Thread(r);
t.setDaemon(true);
t.start();

}


总结:用UDP传输数据的时候,将报文转换成ASCII,在接收数据时候,

byte[] request = new byte[8192];

mServerSocket = new DatagramSocket(ServerPort);

DatagramPacket pack = new DatagramPacket(request, request.length);

mServerSocket.receive(pack);

String RecMsg = new String(pack.getData(),0,pack.getLength());

默认的编码格式是unicode编码,

而我传过来的数据是ASCII报文(机内码),字母、符号、数字都是1个byte,汉字是2个byte,

在接收数据的时候,要将这些的报文按照gb2312(机内码)的编码格式重组。

byte[] request = new byte[8192];

mServerSocket = new DatagramSocket(ServerPort);

DatagramPacket pack = new DatagramPacket(request, request.length);

mServerSocket.receive(pack);

String RecMsg = new String(pack.getData(),0,pack.getLength(),"gb2312");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: