1.创建UDP套接字:
public void UDPServerActive(boolean isNeedActive){
if(isNeedActive) {
try {
if (mSocket != null) {
mSocket.close();
mSocket = null;
}
if (mRevPacket != null) {
mRevPacket = null;
}
mSocket = new DatagramSocket(mPort);
mRevPacket = new DatagramPacket(MyUdpData, 0, MyUdpData.length);
mSocket.setReuseAddress(true);
Recv.append("UDP套接字打开成功!\n\n");
} catch (Exception e) {
mSocket = null;
mRevPacket = null;
Recv.append(e.getMessage());
Recv.append("UDP端口端口可能已被占用!\n\n");
}
UDPServerUDPRead();
}
else {
if (mRevThread != null)
{
mRevThread.interrupt();
}
if (mSocket != null) {
mSocket.close();
}
mRevPacket = null;
mSocket = null;
mRevThread = null;
}
}
2.绑定端口
Myip = getIP();
mPort = DEFAULT_PORT;
IPandPortV.append(Myip+":"+Integer.toString(mPort));
UDPServerActive(true);
mPort的值等于指定的端口号,因为前面定义常量DEFAULT_PORT 值
private final static int DEFAULT_PORT = 39169;
3.接收数据
public void UDPServerUDPRead(){
if(mSocket == null) {
return;
}
mRevThread = new Thread() {
@Override
public void run() {
Recv.append("UDP开始侦听......\n\n");
while (!Thread.interrupted()) {
try {
mSocket.receive(mRevPacket);
} catch (IOException e) {
continue;
}
4.处理数据
public void UDPServerUDPRead(){
if(mSocket == null) {
return;
}
mRevThread = new Thread() {
@Override
public void run() {
Recv.append("UDP开始侦听......\n\n");
while (!Thread.interrupted()) {
try {
mSocket.receive(mRevPacket);
} catch (IOException e) {
continue;
}
int p = 0;
int j = 0;
int m = 0;
String bytestr = "";
String CardNo16 = "";
String CardInfStr = "";
String CardNoStr= "";
String RemoteHostIP;
long cardno10=0;
long cardnum=0;
int RemotePort;
int length=0;
String SerialNum = "";
RemoteHostIP = mRevPacket.getAddress().getHostAddress();
RemotePort = mRevPacket.getPort();
int len = mRevPacket.getLength();
if(len > 0) {
strls = "";
String strls1;
for (int i = 0; i < len; i++) {
strls1 = "0"+ Integer.toHexString(MyUdpData[i] & 0xff);
strls = strls + strls1.substring(strls1.length()-2);
if(i == (len-1))
{
break;
}
strls = strls + " ";
}
strls = strls + "\n";
public void UDPServerUDPSendTo(String ipstr,int udpport,byte udpbuf[],int udpbuflen){
if(mSocket == null) {
return;
}
new Thread() {
@Override
public void run() {
try {
DatagramPacket mPacketls= new DatagramPacket(udpbuf,udpbuflen, InetAddress.getByName(ipstr), udpport);
mSocket.send(mPacketls);
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
5.向指定IP发送
public void SendOrder(View view){
String RemotIpStr=RemotIpV.getText().toString();
String SendInfStr=InputstrV.getText().toString().replaceAll(" +", "");
if (SendInfStr.length()<1){
Recv.append("请输入发送信息!\n\n");
return;
}else if(!ipCheck(RemotIpStr)) {
Recv.append("IP地址错误!\n\n");
return;
}
int s = SendInfStr.length();
byte[] sendbuf = new byte[s/2];
int a = s / 2;
for (int i = 0; i < a; i++) {
sendbuf[i] = (byte)Integer.parseInt(SendInfStr.substring(i*2,i*2+2),16);
}
UDPServerUDPSendTo(RemotIpStr,mPort,sendbuf,a);
}

|