如何获得在Android中使用UDP数据? [英] How to receive data using UDP in Android?

查看:494
本文介绍了如何获得在Android中使用UDP数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用下面的code,从一个特定的端口接收数据。它不工作的机器人。但是,将数据发送到特定的端口工作正常。

 公共类UDPDemo延伸活动{
  私人TextView的电视;

  @覆盖
  公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);
    电视=(TextView中)findViewById(R.id.recv_message);
    尝试 {
      DatagramSocket的ClientSocket的=新的DatagramSocket(9876);
      byte []的receivedata =新的字节[1024];
      而(真)
      {
        DatagramPacket类recv_packet =新的DatagramPacket(receivedata,receivedata.length);
        Log.d(UDP,S:接收...);
        clientsocket.receive(recv_packet);
        字符串rec_str =新的String(recv_packet.getData());
        tv.setText(rec_str);
        Log.d(接收字符串,rec_str);
        InetAddress类ip地址= recv_packet.getAddress();
        INT端口= recv_packet.getPort();
        Log.d(IPAddress表示,ipaddress.toString());
        Log.d(端口,Integer.toString(端口));
      }
    }赶上(例外五){
      Log.e(UDP,S:错误,E);
    }
  }
}
 

解决方案

如果您使用的是仿真器,你可能需要设置的重定向,记得模拟器是一个虚拟的路由器后面。

在换句话说,输入这些命令;

 远程登录本地主机5554
REDIR添加UDP:9876:9876
 

,然后重试。

I use the following code to receive the data from a particular port. It's not working in Android. But sending data to particular port is working fine.

public class UDPDemo extends Activity {
  private TextView tv;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    tv = (TextView)findViewById(R.id.recv_message);
    try {
      DatagramSocket clientsocket=new DatagramSocket(9876);
      byte[] receivedata = new byte[1024];
      while(true)
      {
        DatagramPacket recv_packet = new DatagramPacket(receivedata, receivedata.length);
        Log.d("UDP", "S: Receiving...");
        clientsocket.receive(recv_packet);
        String rec_str = new String(recv_packet.getData());
        tv.setText(rec_str);
        Log.d(" Received String ",rec_str);
        InetAddress ipaddress = recv_packet.getAddress();
        int port = recv_packet.getPort();
        Log.d("IPAddress : ",ipaddress.toString());
        Log.d(" Port : ",Integer.toString(port));
      }
    } catch (Exception e) {
      Log.e("UDP", "S: Error", e);
    }
  }
}

解决方案

If you are using the emulator you may need setup redirects, remember the emulator is behind a virtual router.

In other words, type these commands in;

telnet localhost 5554
redir add udp:9876:9876

and try again.

这篇关于如何获得在Android中使用UDP数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆