PZHelp_UDPServer
public class PZHelp_UDPServer extends Thread {
private static final String TAG = "PZHelp_UDPServer";
private DatagramSocket socket;
private DatagramPacket packet;
private int port;
private boolean isUDPServerRunning;
private ByteReceiveListener byteListener = null;
private StringReceiveListener strListener = null;
private int receiveType;
public PZHelp_UDPServer(int port, ByteReceiveListener listener) {
this.port = port;
this.byteListener = listener;
receiveType = 1;
byte[] data = new byte[2048];
packet = new DatagramPacket(data, data.length);
}
public PZHelp_UDPServer(int port, StringReceiveListener listener) {
this.port = port;
this.strListener = listener;
receiveType = 2;
byte[] data = new byte[2048];
packet = new DatagramPacket(data, data.length);
}
@Override
public synchronized void start() {
super.start();
isUDPServerRunning = true;
}
@Override
public void run() {
try {
socket = new DatagramSocket(port);
while (isUDPServerRunning && !socket.isClosed()) {
socket.receive(packet);
if (receiveType == 1){
byteListener.Receive(packet.getAddress().toString(), getByteArr(packet.getData(), packet.getOffset(), packet.getLength()));
}else {
strListener.Receive(packet.getAddress().toString(),new String(packet.getData(), 0, packet.getLength(),"GBK"));
}
}
socket.close();
} catch (Exception e) {
if (receiveType == 1){
byteListener.onFail(e.getMessage());
}else {
strListener.onFail(e.getMessage());
}
}
}
public void send(String message) {
try {
if (isUDPServerRunning && !socket.isClosed()) {
socket.send(new DatagramPacket(message.getBytes(), message.length(), packet.getAddress(), packet.getPort()));
}
} catch (IOException e) {
byteListener.onFail(e.getMessage());
e.printStackTrace();
}
}
public void send(byte[] message) {
try {
if (isUDPServerRunning && !socket.isClosed()) {
socket.send(new DatagramPacket(message, message.length, packet.getAddress(), packet.getPort()));
}
} catch (IOException e) {
byteListener.onFail(e.getMessage());
e.printStackTrace();
}
}
private byte[] getByteArr(byte[] data, int start, int length) {
byte[] ret = new byte[length];
System.arraycopy(data, start, ret, 0, length);
return ret;
}
void close() {
isUDPServerRunning = false;
}
public interface ByteReceiveListener {
void onFail(String err);
void Receive(String address, byte[] response);
}
public interface StringReceiveListener {
void onFail(String err);
void Receive(String address, String response);
}
}
Main function use
mUDPServer = new PZHelp_UDPServer(3232, new PZHelp_UDPServer.StringReceiveListener() {
@Override
public void onFail(String err) {
Log.d(TAG, "onFail: " + err);
}
@Override
public void Receive(String address, String response) {
}
});
mUDPServer.start();