UdpプロトコルによるJsonデータ送受信

3377 ワード

本白は新会社に入社して最初の任務の需要を受け取って、メーカーはすでに1つのUdpリスニングプログラムを書いて、私にリスニングされたipアドレスとポートにいくつかのパラメータを送ってJsonの形式で、特に記録します!
1.まずテストコードを書き、サーバー側とクライアント側のデータ送受信を模擬する
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
//    ,           
public class TestServer {

 private DatagramSocket datagramSocket;

 private final int port = 1234;//       ,            
 
 public static void main(String[] args) throws SocketException {
     new TestServer ().service();
 }

 public TestServer() throws SocketException {
     datagramSocket = new DatagramSocket(port);
     System.out.println("     ");
 }
 
 public String echo(String msg) {
     return "echo:" + msg;
 }

 public void service() {
     while (true) {
         try {
             DatagramPacket packet = new DatagramPacket(new byte[512], 512);
             datagramSocket.receive(packet);
             String msg = new String(packet.getData(), 0, packet.getLength());
             //      IP,  ,     
             System.out.println(packet.getAddress() + "/" + packet.getPort() + " msg:" + msg);
             //               ,    Json  ,             
             packet.setData(echo(msg).getBytes());
             datagramSocket.send(packet);
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
 }
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

//   ,           
public class TestClient {
    private String remoteHost = "xx.xx.xx.xx";//     IP  
    private int remotePort = 1234;//        ,         
    private DatagramSocket datagramSocket;

    public TestClient() throws SocketException {
        datagramSocket = new DatagramSocket();
    }

    public static void main(String[] args) throws SocketException {
        new TestClient().talk();
    }

    public void talk() {
        try {
            InetAddress address = InetAddress.getByName(remoteHost);
                  Json   
            JsonObject object = new JsonObject();
            object.addProperty("msgId", "1111");
            object.addProperty("msgType", 111);
            object2.addProperty("LightMode", 1);
            object2.addProperty("Brightness", 10);
            String content = object.toString();
            System.out.println(content);//              
//    
            byte[] buffer = content.getBytes();
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, remotePort);
            datagramSocket.send(packet);
//    
            DatagramPacket inputPacket = new DatagramPacket(new byte[512], 512);
            datagramSocket.receive(inputPacket);
            System.out.println(new String(inputPacket.getData(), 0, inputPacket.getLength()));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            datagramSocket.close();
        }
    }
}

Jsonデータに包装するにはjarパッケージを追加する必要があります.バージョンは自分で選択できます:gson-2.8.0.jar
2.問題点を記録する
  • Jsonデータを梱包する際、addProperty(property,value)メソッドを利用し、property名を間違え、例えばmsgIdでmsgID
  • と書く.
  • IPは正しく書く
  • メーカー側のデータ転送は私が書いたもう一つのhttpインタフェースを呼び出し、getかpostかは必ずメーカーと一致しなければならない