服务接收UDP数据包

时间:2014-05-21 12:17:33

标签: android android-service

我已经创建了一项服务,以便在收到来自服务器(PC)的消息时进行监听。但它不起作用,我不知道为什么。有人可以帮帮我吗?

我在我的主要活动中调用我的服务,在增量()中如下:

 Intent intent = new Intent(this, UDPlisten.class);
  startService(intent);

我不知道如何在主要活动中检索PC发送的数据。因为我希望在服务器向应用程序发送消息时收到通知。

服务:

public class UDPlisten extends Service {

static String UDP_BROADCAST = "UDPBroadcast";
DatagramSocket socket;


private void listenAndWaitAndThrowIntent(int port) throws Exception {
    byte[] recvBuf = new byte[15000];
    if (socket == null || socket.isClosed()){
        socket = new DatagramSocket(port);
        socket.setBroadcast(true);
    }
    DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length);
    Log.e("UDP", "Waiting for UDP broadcast");
    socket.receive(packet);
    String message = new String(packet.getData()).trim();
    Log.e("UDP", "message: " + message);

//  broadcastIntent(senderIP, message);
    //socket.close();
}
private void broadcastIntent(String message) {
    Intent intent = new Intent(UDPlisten.UDP_BROADCAST);
    intent.putExtra("message", message);
    sendBroadcast(intent);
}
     Thread UDPBroadcastThread;

void startListenForUDPBroadcast() {
    UDPBroadcastThread = new Thread(new Runnable() {
        public void run() {
            try {
               // InetAddress broadcastIP =InetAddress.getByName("10.0.2.16"); 
                int port = 4000;
                while (shouldRestartSocketListen) {
                    listenAndWaitAndThrowIntent(port);
                }
                //if (!shouldListenForUDPBroadcast) throw new ThreadDeath();
            } catch (Exception e) {
                Log.i("UDP", "no longer listening for UDP broadcasts cause of error " + e.getMessage());
            }
        }
    });
    UDPBroadcastThread.start();
}
           private Boolean shouldRestartSocketListen=true;

void stopListen() {
    shouldRestartSocketListen = false;
    socket.close();
}

@Override
public void onCreate() {
    shouldRestartSocketListen = true;
    startListenForUDPBroadcast();
    Log.i("UDP", "Service started");
};

@Override
public void onDestroy() {
    stopListen();
}


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    shouldRestartSocketListen = true;
    startListenForUDPBroadcast();
    Log.i("UDP", "Service started");
    return START_STICKY;
}

@Override
public IBinder onBind(Intent intent) {
    return null;
}

提前致谢!

0 个答案:

没有答案