80,349
社区成员
发帖
与我相关
我的任务
分享
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;
import android.net.wifi.WifiManager;
import com.lincson.generic.Log;
public class UdpHelper implements Runnable {
private static final int port = 6661;// 监听端口
private boolean run = true;// 开启线程
private WifiManager.MulticastLock lock;
private static final String Tag = "UdpHelper";
private DatagramSocket readSocket=null;
private int msgMaxSize= 65600;
public UdpHelper(WifiManager manager) {
lock = manager.createMulticastLock("UDPwifi");
}
@Override
public void run() {
startBroadcastListener();
}
public void stopListener() {
run = false;
}
/**
* 监听数据
*/
private void startBroadcastListener() {
try {
lock.acquire();
readSocket = new DatagramSocket(port);
readSocket.setReuseAddress(true);
readSocket.setBroadcast(true);
try {
while (run) {
//lock.acquire();
// 准备接收数据
Log.d(Tag, "准备接收");
// 接收的字节大小,客户端发送的数据不能超过这个大小
byte[] message = new byte[msgMaxSize];
DatagramPacket datagramPacket = new DatagramPacket(message, message.length);
readSocket.receive(datagramPacket);
byte[] data = datagramPacket.getData();
String strMsg = new String(data).trim();
Log.d(Tag, "int :" + srtT);
Log.d(Tag, datagramPacket.getAddress().getHostAddress().toString() + ":" + strMsg);
//lock.release();
new notifiyEventThread(strMsg).start();
}
} catch (IOException e) {// IOException
e.printStackTrace();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
class notifiyEventThread extends Thread{
private String msg;
public notifiyEventThread(String strMsg)
{
msg=strMsg;
}
public void run() {
notifiyEvent(msg);
}
/**
* 根据指令发出(开单、结帐、划单)通告
*
* @param message
*/
private void notifiyEvent(String msg) {
if ("end".equals(msg)) {
DianxinEvent.notifiEndBill();
} else {
DianxinEvent.notifiOpenBillEvent(msg);
}
}
}
}