package com.xu.servlet; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONObject; //发送请求的代码 public class Snippet { public static void main(String[] args) { System.out.println("---------"); Snippet snippet = new Snippet(); snippet.Test(); } public void Test() { //1、创建socket对象,通过DatagramSocket对象 DatagramSocket ds = null; try { ds = new DatagramSocket(); } catch (SocketException e) { e.printStackTrace(); } String serverIP = ""; String socketPort =""; JSONObject jsonObject = new JSONObject(); try { /*jsonObject.put("type", "openDoor"); jsonObject.put("doorId", "1"); jsonObject.put("interval", "20");*/ jsonObject.put("type", "closeDoor"); jsonObject.put("doorId", "1"); jsonObject.put("interval", "20"); } catch (JSONException e1) { e1.printStackTrace(); } //2、确定数据,并封装成数据包 byte[] data = jsonObject.toString().getBytes(); DatagramPacket dp = null; try { dp = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.32.24"), 8086); } catch (UnknownHostException e) { e.printStackTrace(); } //3、通过scoket服务,将已有的数据发送出去,通过send方法 try { System.out.println(" dp = "+ dp); ds.send(dp); } catch (IOException e) { e.printStackTrace(); } ds.close(); } }
//接收数据 class AccZonePersonSaveThread extends Thread { @Override public void run() { DatagramSocket ds = null; System.out.println("---------"); try { ds = new DatagramSocket(8088); } catch (SocketException e1) { e1.printStackTrace(); } while (true) { try { //2、定义数据包,用于存储数据 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, buf.length); //3、通过服务的receive方法,接收数据并存入数据包中 ds.receive(dp); //4、通过数据包中的方法,获取其中的数据。 String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); String data = new String(dp.getData(),"GBK"); System.out.println("ip = " + ip + ": " + port + ": " + data); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } }接收的时候加上
String data = new String(dp.getData(),"GBK");
就可以了