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");