【问题标题】:Android : Listener for incoming UDP messages?Android:传入 UDP 消息的侦听器?
【发布时间】:2014-07-09 05:27:00
【问题描述】:

我有一个应用程序 android 向服务器 (PC) 发送数据,但我没有从 PC 向应用程序接收任何数据。还有,如何监听传入的 UDP 消息?

因为我需要一个应用程序一直运行,即使该应用程序已关闭。如何确保我的“侦听器”服务始终运行? 我希望在消息从服务器到达智能手机时收到通知。

这是我的代码:

public class MainActivity extends Activity implements TextWatcher, OnClickListener  {

Client client;
EnvoyerMess envoyermessage;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    client = new Client();
    client.execute();
           lancer.setOnClickListener( new OnClickListener() {

         @Override
         public void onClick(View v)  {

             envoyermessage=new EnvoyerMess();
             envoyermessage.execute();

       }

      });

}

class Client extends AsyncTask<Void,Void,String>{

     DatagramSocket client;
     String test ;


    public String doInBackground(Void...params){         
        String result=null;
        int port=4000;

        DatagramSocket clientSocket = null;
        byte[] receiveData = new byte[256];
        DatagramPacket packet = new DatagramPacket(receiveData, receiveData.length);
            try{ 
                InetAddress adresse = InetAddress.getByName("10.0.2.2");
                clientSocket = new DatagramSocket(port);
                clientSocket.receive(packet);
                result = new String(packet.getData());                          
                           Log.d("","Received :) ");
        }catch (Exception e) {
            e.printStackTrace();

        } finally {
            if (clientSocket != null) {
                clientSocket.close();             
            }
        }
         return result;
    }


    public void onPostExecute(String result){ 
         if (result != null) { 
             //createNotify(); 
                 TextView tv = (TextView) MainActivity.this.findViewById(R.id.textView1);
              tv.setText(result);

    }
}

提前谢谢..

【问题讨论】:

  • 让它在您计算机上的客户端/服务器中工作,首先到您的计算机上 - 当它工作时,将其移动到 android。从 android 到家用机器的网络通信有很多陷阱。 (例如,您是在家中使用 wifi 还是使用运营商网络到您家?如果是后者,at 可以安全地假定他们的代码您将无法工作 - 因为 10.0.0.2 将无法访问从那个起源)

标签: android udp


【解决方案1】:

我首先要确保 PC 实际上将数据包发送到正确的 IP 地址。使用wireshark、http://www.wireshark.org/ 或类似工具来执行此操作。

为确保即使应用程序关闭,您的任务仍在运行,您需要一个服务http://developer.android.com/guide/components/services.html

编辑:

如果您使用的是模拟器,则必须首先在 avd 路由器中启用重定向。此链接提供有关如何完成此 developer.android.com/tools/devices/emulator.html#redirection 的说明(我无法发布链接,因此您必须复制粘贴)。

如果您在 Windows 中开发,您还需要启用 telnet。此链接描述了完成 social.technet.microsoft.com/wiki/contents/articles/910.windows-7-enabling-telnet-client.aspx 的步骤(同样,复制粘贴)

【讨论】:

  • 感谢您的回答,PC 正在向正确的 IP 地址发送数据包。我不知道如何工作服务。你有客户端/服务器的应用示例吗?
  • 我不知道如何使用服务,这是学习的绝佳机会。阅读链接并尝试。我已经编辑了我的答案,包括有关如何使用模拟器启用网络的说明。
猜你喜欢
  • 2018-12-04
  • 2021-03-16
  • 2014-12-04
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
  • 2010-12-04
  • 2011-10-28
  • 2022-01-19
相关资源
最近更新 更多