公司最近需要往智能家居方面发展,需要用到UDP协议传输数据,在网上找到了一些资料,但是发现传输中文的时候有乱码的现象,经过我多番捣鼓,终于解决了这个问题,下面贴上关键代码

客户端:

 1 public class UDPClient {
 2     private static final int SERVER_PORT = 6000;
 3     private DatagramSocket dSocket = null;
 4     private String msg;
 5     private String ip;
 6 
 7     public UDPClient(String msg, String ip) {
 8         super();
 9         this.msg = msg;
10         this.ip = ip;
11     }
12 
13     public void send() {
14         try {
15             dSocket = new DatagramSocket();
16             byte[] bys = msg.getBytes();
17             int len = bys.length;
18             DatagramPacket dp = new DatagramPacket(bys, len, InetAddress.getByName(ip), SERVER_PORT);
19             dSocket.send(dp);
20             // }
21         } catch (Exception e) {
22             // TODO Auto-generated catch block
23             e.printStackTrace();
24         } finally {
25             dSocket.close();
26         }
27     }
28 }

服务端:

public class UDPServer implements Runnable {
	private static final int PORT = 6000;
	private byte[] msg = new byte[2048];
	Context context;

	public UDPServer(Context context) {
		this.context = context;
	}

	@Override
	public void run() {
		DatagramSocket s;
		try {
			s = new DatagramSocket(PORT);
			while (true) {
				int len = msg.length;
				DatagramPacket dp = new DatagramPacket(msg, len);
				s.receive(dp);
				byte[] byc = dp.getData();
				int len2 = dp.getLength();
				String ss = new String(byc, 0, len2);
				Message msg = Message.obtain();
				msg.what = 0x789;
				msg.obj = ss;
				MainActivity.handler.sendMessage(msg);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

  

posted on 2017-06-06 15:37  我没吃过肯德基  阅读(1212)  评论(0编辑  收藏  举报