java udp协议请求demo

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;
}
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于您没有给出更具体的要求,我将提供一个简单的Java UDP Socket网关demo,用于将从客户端发送的消息转发到服务器,并将从服务器返回的消息发送回客户端。 ```java import java.io.IOException; import java.net.*; public class UDPSocketGateway { private DatagramSocket clientSocket; private DatagramSocket serverSocket; private InetAddress serverAddress; private int serverPort; public UDPSocketGateway(int clientPort, String serverAddress, int serverPort) throws SocketException, UnknownHostException { clientSocket = new DatagramSocket(clientPort); serverSocket = new DatagramSocket(); this.serverAddress = InetAddress.getByName(serverAddress); this.serverPort = serverPort; } public void start() throws IOException { byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; while (true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); String sentence = new String(receivePacket.getData(), 0, receivePacket.getLength()); System.out.println("Received from client: " + sentence); sendData = sentence.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, serverPort); serverSocket.send(sendPacket); System.out.println("Sent to server: " + sentence); receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); sentence = new String(receivePacket.getData(), 0, receivePacket.getLength()); System.out.println("Received from server: " + sentence); sendData = sentence.getBytes(); sendPacket = new DatagramPacket(sendData, sendData.length, receivePacket.getAddress(), receivePacket.getPort()); clientSocket.send(sendPacket); System.out.println("Sent to client: " + sentence); } } public static void main(String[] args) throws IOException { UDPSocketGateway gateway = new UDPSocketGateway(9876, "localhost", 9877); gateway.start(); } } ``` 在此示例中,我们创建了一个名为`UDPSocketGateway`的类,该类具有以下属性: - `clientSocket`和`serverSocket`:分别用于接收客户端和服务器发送的数据包。 - `serverAddress`和`serverPort`:分别用于指定服务器的IP地址和端口号。 在构造函数中,我们初始化这些属性,并在`start()`方法中实现了UDP Socket网关的主要逻辑。 在while循环中,我们首先从客户端接收数据并将其发送到服务器,然后等待服务器响应。一旦我们从服务器接收到响应,我们将其发送回客户端。 在主方法中,我们创建了一个`UDPSocketGateway`实例并调用其`start()`方法,以便启动UDP Socket网关。 请注意,此示例仅用于演示目的,并不适用于生产环境。在实际应用中,您需要采取适当的安全措施,例如验证输入和输出数据,对数据进行加密等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值