Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android广播UDP工作,但单播不工作_Android_Sockets - Fatal编程技术网

Android广播UDP工作,但单播不工作

Android广播UDP工作,但单播不工作,android,sockets,Android,Sockets,我正在尝试开发一个示例应用程序,它通过网络侦听udp广播数据包,一旦收到广播,它就会用另一个数据包回复客户端;y从服务器客户端正在向服务器发送一条单播消息,但未被接收。在接收广播并回复之前,该消息工作正常,但接收单播消息不起作用。我正在发布代码。如有任何建议,将不胜感激 import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.Inet4Address; import java.net.Inet

我正在尝试开发一个示例应用程序,它通过网络侦听udp广播数据包,一旦收到广播,它就会用另一个数据包回复客户端;y从服务器客户端正在向服务器发送一条单播消息,但未被接收。在接收广播并回复之前,该消息工作正常,但接收单播消息不起作用。我正在发布代码。如有任何建议,将不胜感激

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;

import android.os.Handler;
import android.os.Message;
import android.util.Log;

public class MyDatagramReceiver extends Thread {
    private boolean bKeepRunning = true;
    private String lastMessage = null;
    private Handler mHandler = null;
    private DatagramSocket datagramsocket = null;
    DatagramPacket packet = null;
    private static InetAddress Serverip = null;
    private static int port = 8090;

    public MyDatagramReceiver(Handler handler) {

        this.mHandler = handler;
        Log.v("MyDatagramReceiver", "Handler Initialised");

    }

    public void run() {
        String message = null;
        InetAddress ip = null;

        byte[] lmessage = new byte[10];

        try {
            Serverip = getDeviceIP();
            Log.v("MyDatagramReceiver", "DeviceIp:" + Serverip);
            datagramsocket = new DatagramSocket(port, Serverip);
            datagramsocket.setSoTimeout(5000);
            datagramsocket.setBroadcast(true);

            Log.v("MyDatagramReceiver", "Socket CREATED");

            while (bKeepRunning) {

                packet = new DatagramPacket(lmessage, lmessage.length);
                Log.v("MyDatagramReceiver", "RECEIVING PACKET CREATED");

                datagramsocket.receive(packet);
                Log.v("MyDatagramReceiver", "PACKET RECEIVED");

                message = new String(lmessage);
                Log.v("MyDatagramReceiver", "Received packet contains:"
                        + message);

                ip = packet.getAddress();
                Log.v("MyDatagramReceiver", "IP" + ip);
                lastMessage = message;
                Log.v("MyDatagramReceiver", "lastmessage contains:"
                        + lastMessage);
                String var = message;
                Message completeMessage = mHandler.obtainMessage();
                completeMessage.obj = var;
                Log.v("MyDatagramReceiver", "completeMessage" + completeMessage);
                completeMessage.sendToTarget();
                byte[] m = "Hello_client".getBytes();
                InetAddress aHost = InetAddress.getLocalHost();

                DatagramPacket request = new DatagramPacket(m, m.length, ip,
                        port);
                datagramsocket.send(request);
                Log.v("MyDatagramReceiver", "Packet sent");
            }
            if (datagramsocket != null) {
                datagramsocket.close();
            }

        } catch (Throwable e) {
            e.printStackTrace();
        }

    }

    public void kill() {
        bKeepRunning = false;
    }

    public String getLastMessage() {
        return lastMessage;
    }

    public static InetAddress getDeviceIP() {
        if (Serverip != null) {
        } else {
            try {
                for (Enumeration<NetworkInterface> en = NetworkInterface
                        .getNetworkInterfaces(); en.hasMoreElements();) {
                    NetworkInterface intf = en.nextElement();
                    for (Enumeration<InetAddress> enumIpAddr = intf
                            .getInetAddresses(); enumIpAddr.hasMoreElements();) {
                        InetAddress intAdress = enumIpAddr.nextElement();
                        if (!intAdress.isLoopbackAddress()) {
                            if (intAdress instanceof Inet4Address) {
                                Serverip = intAdress;
                                Log.d("ServerIpHelper", "Client Ip Address: "
                                        + Serverip.getHostAddress().toString());
                                return Serverip;
                            }
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return Serverip;
    }

}

我只看到一个datagramsocket.send,您在哪里发送单播消息?我将此数据包作为回复发送到客户端