您的位置:首页 > 编程语言 > Java开发

java udp协议请求demo

2016-10-31 15:56 148 查看
package com.local.hr.udp;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import java.util.Collections;

import java.util.HashSet;

import java.util.List;

import java.util.Set;

import com.local.hr.util.EdHrCode;

import com.local.hr.util.ReturnEntity;

import com.local.socket.osm.OseamControl;

public class UdpClientSocket extends Thread{
private byte[] buffer = new byte[1024];  
private String serverHost;
private int serverPort = 9881;

    private DatagramSocket ds = null;  

    private Set<ReturnEntity> data = Collections.synchronizedSet(new HashSet<ReturnEntity>());//保证线程安全

    private EdHrCode code = new EdHrCode();

    private boolean read =true;

    

    /** 

     * 构造函数,创建UDP客户端 

     */  

    public UdpClientSocket(String serverHost) throws Exception {  

    this.serverHost = serverHost;

        ds = new DatagramSocket(); // 邦定本地端口作为客户端  

    }  

      

    /** 

     * 测试客户端发包和接收回应信息的方法 

     */  

    public static void main(String[] args) throws Exception {  

        UdpClientSocket client = new UdpClientSocket("192.168.1.255"); 

        System.out.println("线程状态 :"+client.getState());

        client.start();

        InetAddress address = InetAddress.getLocalHost();

        String ip = address.getHostAddress();

        System.out.println("");

        client.send(getData("aa3b00ffffffffffff000003015a485238303030373832414730393100000000000000000000000000000000000032414730393100000000000000000000d155"));  

        // 关闭  

        boolean bool= true;

        System.out.println("线程状态 :"+client.getState());

        for (int i = 0; i < 5; i++) {

        if (client.getData().size()>0) {

        try {  

        client.setRead(false);

        client.getDs().close();//停掉udp客户端

        bool=false;

                } catch (Exception ex) {  

                    ex.printStackTrace();  

                } 

        System.out.println("线程状态 :"+client.getState());

        break;
}
Thread.sleep(1000);//时间到了也要停掉
}

        if (bool) {

    try {  

    client.setRead(false); 

    client.getDs().close();//停掉udp客户端

    bool=false;

            } catch (Exception ex) {  

                ex.printStackTrace();  

            } 
}

        for (ReturnEntity en : client.getData()) {

        List<String> list = en.getData();
if (list!=null&&list.size()>0) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}

    }  

    

    private static byte[] getData(String s) {

    return OseamControl.hexStr2ByteArray(s);
}

    

    @Override

    public void run() {

    while(this.isRead()) {
try {
this.receive();
} catch (Exception e) {
if (e instanceof SocketException) {
break;
}
try {
this.sleep(200);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}

    }

  

 

      

    /** 

     * 向指定的服务端发送数据信息 

     */  

    public final void send(

            final byte[] bytes) throws IOException {  

        DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName(serverHost), serverPort);  

        ds.send(dp);  

    }  

  

    /** 

     * 接收从指定的服务端发回的数据 

     */  

    public void receive()  

            throws Exception {  

        DatagramPacket dp = new DatagramPacket(buffer, buffer.length);  

        ds.receive(dp);       

        byte[] data = new byte[dp.getLength()];  

        System.arraycopy(dp.getData(), 0, data, 0, dp.getLength());       

        String s= OseamControl.bytesToHexString(data);

        ReturnEntity entity =code.caseControlCode("5a", s);

        if (entity.getStatus()==ReturnEntity.DATA_STATUS_NORMAL) {

        this.data.add(entity);
}

    }

public String getServerHost() {
return serverHost;
}

public void setServerHost(String serverHost) {
this.serverHost = serverHost;
}

public Set<ReturnEntity> getData() {
return data;
}

public DatagramSocket getDs() {
return ds;
}

public boolean isRead() {
return read;
}

public void setRead(boolean read) {
this.read = read;
}

    

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: