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;
}
}
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;
}
}
相关文章推荐
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
- 使用Java控制UDP协议
- 使用Java控制UDP协议
- 对初学java通信很好的一篇文章:TCP/IP协议与UDP协议的区别和认识
- 黑马程序员 Java网络传输UDP和TCP协议
- java 利用UDP协议 通信
- 使用Java控制UDP协议
- 一个简单的Java UDP协议通信的例子
- JAVA网络编程入门的两个demo(TCP+UDP)
- 基于UDP协议的Java聊天小程序!
- JAVA网络编程入门的两个demo(TCP+UDP)
- 在Java中实现UDP协议编程的方法[转]
- 使用Java控制UDP协议
- 使用Java控制UDP协议
- JAVA网络编程入门的两个demo(TCP+UDP)
- 在Java中使用UDP协议编程的相关类(转)
- java UDP协议和组播实现
- Java中的UDP协议编程
- Java UDP协议传对象