package com.acker.android;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UdpMulticastSocket {
private MulticastSocket mSocket;
private DatagramPacket recvPacket;
private InetAddress groupIp;
private int port;
public UdpMulticastSocket(String multiAddr, int port) {
super();
try {
this.groupIp = InetAddress.getByName(multiAddr);
} catch (UnknownHostException e1) {
e1.printStackTrace();
}
this.port = port;
try {
mSocket = new MulticastSocket(port);
mSocket.joinGroup(groupIp);
} catch (IOException e) {
e.printStackTrace();
}
try {
mSocket.setLoopbackMode(true);
} catch (SocketException e) {
e.printStackTrace();
}
}
public UdpMulticastSocket(String multiAddr, int port, int size) {
super();
try {
this.groupIp = InetAddress.getByName(multiAddr);
} catch (UnknownHostException e1) {
e1.printStackTrace();
}
this.port = port;
try {
mSocket = new MulticastSocket(port);
mSocket.setSendBufferSize(size);
mSocket.setReceiveBufferSize(size);
mSocket.joinGroup(groupIp);
} catch (IOException e) {
e.printStackTrace();
}
try {
mSocket.setLoopbackMode(true);
} catch (SocketException e) {
e.printStackTrace();
}
}
public void udpSend(byte[] data) {
DatagramPacket packet = new DatagramPacket(data, data.length, groupIp,
port);
try {
mSocket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
}
public byte[] udpRecv(int length) {
try {
recvPacket = new DatagramPacket(new byte[length], length);
mSocket.receive(recvPacket);
int len = recvPacket.getLength();
byte[] mData = new byte[len];
System.arraycopy(recvPacket.getData(), 0, mData, 0, len);
return mData;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public String getUdpSrcAdd() {
if (recvPacket != null) {
String address = recvPacket.getAddress().toString();
String[] temp = address.split("/");
return temp[1];
} else {
return null;
}
}
public void udpEnd() {
if (mSocket != null) {
try {
mSocket.leaveGroup(groupIp);
} catch (IOException e) {
e.printStackTrace();
}
mSocket.close();
}
}
}