package com.zkzy.fxfh.utils;

import java.io.IOException;
import java.io.InputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Properties;


/**
 * UDP客户端程序,用于对服务端发送数据,并接收服务端的回应信息.
 */
public class TalkClientUDP {
    private byte[] buffer = new byte[1024];

    private DatagramSocket ds = null;

    /**
     * 构造函数,创建UDP客户端
     * @throws Exception
     */
    public TalkClientUDP() throws Exception {
        ds = new DatagramSocket();
    }
    
    /**
     * 设置超时时间,该方法必须在bind方法之后使用.
     * @param timeout 超时时间
     * @throws Exception
     */
    public final void setSoTimeout(final int timeout) throws Exception {
        ds.setSoTimeout(timeout);
    }

    /**
     * 获得超时时间.
     * @return 返回超时时间
     * @throws Exception
     */
    public final int getSoTimeout() throws Exception {
        return ds.getSoTimeout();
    }

    public final DatagramSocket getSocket() {
        return ds;
    }

    /**
     * 向指定的服务端发送数据信息.
     * @param host 服务器主机地址
     * @param port 服务端端口
     * @param bytes 发送的数据信息
     * @return 返回构造后俄数据报
     * @throws IOException
     */
    public final DatagramPacket send(final byte[] bytes) throws IOException {
    	Properties properties = new Properties();
		// InputStream
		// is=ClassLoader.getSystemResourceAsStream("jdbc.properties");
		InputStream is = this.getClass().getResourceAsStream("/config.properties");
		properties.load(is);
		String host = properties.getProperty("zdkzUdpIp");
		int port = Integer.parseInt(properties.getProperty("zdkzUdpPort"));
		if(is!=null){
			is.close();
		}
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName(host), port);
        ds.send(dp);
        return dp;
    }

    /**
     * 接收从指定的服务端发回的数据.
     * @param lhost 服务端主机
     * @param lport 服务端端口
     * @return 返回从指定的服务端发回的数据.
     * @throws Exception
     */
    public final String receive()
            throws Exception {
        DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
        ds.receive(dp);
        String info = new String(dp.getData(), 0, dp.getLength());
        return info;
    }

    /**
     * 关闭udp连接.
     */
    public final void close() {
        try {
            ds.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    /**
     * 测试客户端发包和接收回应信息的方法.
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
    	TalkClientUDP client = new TalkClientUDP();
        String sendMsg="r:LJZ.PLC003.Channel1.LJZ003.V33:1:False:10";
//        name = java.net.URLEncoder.encode(sendMsg, "UTF-8");
        client.send(sendMsg.getBytes());
        String info = client.receive();
        System.out.println("服务端回应数据:" + info);
    }
}
最近下载更多
ITfans  LV19 2020年12月31日
liuxie  LV12 2020年12月14日
cjy123  LV2 2020年4月6日
fanxiaolin84  LV10 2019年12月26日
哈勃8910  LV1 2019年5月18日
l1104119188  LV2 2019年4月23日
1847731288  LV13 2019年4月15日
zyx123452  LV1 2019年3月22日
zhjwgs  LV15 2019年3月4日
dasda66  LV1 2018年11月14日
最近浏览更多
钱小小  LV3 2023年7月15日
月之氏族  LV23 2022年11月11日
adimgaoshou  LV10 2022年9月6日
764938214  LV7 2022年7月21日
zhendong  LV7 2022年3月6日
111111255  LV2 2021年12月24日
488291556  LV5 2021年11月22日
Aoifee  LV4 2021年11月9日
Allengoo  LV1 2021年10月15日
yiyiyi55555  LV1 2021年9月5日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友