现在的位置: 首页 > 综合 > 正文

java 服务端代码 UDP

2013年03月10日 ⁄ 综合 ⁄ 共 2048字 ⁄ 字号 评论关闭

代码的功能就是构建一个UDP服务器

接口:

客户端给我发送请求  "IP,paraNumber" 向我询问关于某个设备的参数

流程:先做参数检查 1、参数个数,2、参数是否准确

根据要求回答客户端

import java.io.*;
import java.net.*;

public class UDP {
 final private static int PARA_PORT = 19999;

 final private static int PARA_ERROR = 101;// "para error";
 final private static int SUCCESS = 1;

 private static UDP _instance;// singleton

 private UDP() {

 }

 public static synchronized UDP getInstance() {
  if (_instance == null)
   _instance = new UDP();
  return _instance;
 }
 
 
 public void sendDataToClient(Object[] sendData, DatagramPacket packet,
   DatagramSocket socket) throws IOException {
  String sendDataString = String.format("%d,%s,%d,%s",
    (Object[]) sendData);

  byte buffer[] = sendDataString.getBytes();
  // 得到请求的ip地址
  InetAddress address = packet.getAddress();
  // 得到请求的ip端口
  int port = packet.getPort();
  // 准备报文
  DatagramPacket sent_packet = new DatagramPacket(buffer, buffer.length,
    address, port);
  // 发送报文
  socket.send(sent_packet);
 }

 public void paraUDPServer() throws Exception {
  // 创建UDP的Socket
  DatagramSocket socket = new DatagramSocket(PARA_PORT);
  while (true) {
   // 缓冲字符变量
   byte buffer[] = new byte[256];
   // 数据包变量
   DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
   // 接收数据包
   socket.receive(packet);
   String recString = new String(packet.getData(), 0, packet
     .getLength());
   
   Object[] sendData = new Object[4];
   sendData[0] = Integer.valueOf(SUCCESS);
   sendData[1] = "";
   sendData[2] = "";
   sendData[3] = "";
   if (recString.indexOf(",") == -1) {
    sendData[0] = Integer.valueOf(PARA_ERROR);
    sendDataToClient(sendData, packet, socket);
    continue;
   }

   String[] para_rec = recString.split(",");

   if (para_rec.length != 2) {
    sendData[0] = Integer.valueOf(PARA_ERROR);
    sendDataToClient(sendData, packet, socket);
    continue;
   }

   sendData[3] = "corect answer";
   sendDataToClient(sendData, packet, socket);

  }
 }
 
 public static void main(String []argv)
 {
  Object[] sendData = new Object[4];
  sendData[0] = Integer.valueOf(1);
  sendData[1] = "172.12.1.2";
  sendData[2] = Integer.valueOf(123);
  sendData[3] = "testadfaerfa";
  String sendDataString = String.format("%d,%s,%d,%s",
    (Object[]) sendData);
  System.out.println(sendDataString);
 }

抱歉!评论已关闭.