【问题标题】:udp in android exampleudp 在 android 示例中
【发布时间】:2015-02-16 19:32:05
【问题描述】:

我正在使用下面的代码在两个 android 设备之间发送文本消息,但我无法在接收方接收数据包
发件人:

   String messageStr="Hello Android!";
          Log.d("note","message prepaered");
          int server_port = 12345;
          try{
              Log.d("note","socket prepaered");
          DatagramSocket s = new DatagramSocket();
              Log.d("note","socket defined");
          InetAddress local = InetAddress.getByName(ip.getText().toString());
          int msg_length=messageStr.length();
          byte[] message = messageStr.getBytes();
              Log.d("note","converting message to bytes");
          DatagramPacket p = new DatagramPacket(message, msg_length,local,server_port);
          s.send(p);
              Log.d("note","sending msg");}
          catch (SocketException e){
              Log.d("error",e.getMessage());
          }
          catch(IOException v1){
              Log.d("error", v1.getMessage());
          } 

接收者:

 String text;
          int server_port = 12345;
          byte[] message = new byte[1500];
          try{
          DatagramPacket p = new DatagramPacket(message, message.length);
              Log.d("note","putting msg in packet");
          DatagramSocket s = new DatagramSocket(server_port);
              Log.d("note","defining socket");
          s.receive(p);
              Log.d("note","recieving packet");
          text = new String(message, 0, p.getLength());
          msg.setText(text);
          s.close();
          }
          catch (SocketException e){
              Log.d("error",e.getMessage());
          }
          catch(IOException v1){
              Log.d("error", v1.getMessage());
          }

提前感谢您的帮助

【问题讨论】:

  • 不是一个答案,而是一个警告:计划只使用那个环回吗?如果您想通过移动网络发送 UDP,您可能会在 NAT 和代理方面遇到很多麻烦。

标签: java android udp


【解决方案1】:

好的。你的故事中有很多未定义的变量。 首先,你应该在本地机器上试试这个,你可以确定这不是网络问题。 其次,尝试将接收代码包裹在一个无限循环中,这样会使调试更容易。 如果到现在为止,您发现您的代码实际上是在本地主机上运行的, 您应该检查您设备上的网络配置,确保您使用的地址正确,并且两台设备都在同一个网络中。

如果您的代码在本地主机上运行时遇到问题,请尝试在工作软件上独立测试您的服务器和客户端,例如 http://sourceforge.net/projects/sockettest/,它可以让您确保您的客户端和服务器代码正常运行

也不要忘记时间,先启动你的接收器。

附:请正确格式化您的代码。

【讨论】:

  • 首先感谢重播,其次如果你有办法我应该如何在本地机器上测试代码我会感激不尽???
  • 当然,这真的很容易。您可以将包从本地计算机发送到本地计算机。只需从命令行将接收器作为 Java 应用程序运行。只需创建一个应用程序并将您的代码放入“main”方法中。在它运行时,对您的发件人执行相同的操作。不要忘记使用 127.0.0.1 作为 IP 地址,它是您本地机器的地址。
  • 感谢当我首先运行接收器时,它解决了问题,但我想问你是否要发送语音而不是文本,我是否应该更改代码中的任何内容
  • 不,语音只是一个字节数组。您所要做的就是将语音转换为发送方的字节。
  • 但是我录制的声音是一个短数组而不是字节,我认为使用 DatagramPacket 传输短数组是不可接受的
猜你喜欢
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多