android - 发送和接收数据报包

标签 android sockets bluetooth

对不起,我的英语不好。我必须使用android上的蓝牙pan界面从手机到 radio 发送和接收数据。这是我已实现发送的代码,已将其放入AsyncTask的函数DoInBackground()中:

 try
           {

            ds = new DatagramSocket();
            byte buf[] = "Ciao".getBytes();
            DatagramPacket msg = new DatagramPacket(buf, buf.length, InetAddress.getByName(add), p);

            ds.send(msg);

        }

而且效果很好。现在我必须等待100秒广播的答案。我决定用以下代码实现它:
try
       {
           ds.setSoTimeout(10000);

           while(true)
           {
               try
               {
                   ds.receive(dp);
               }
               catch (IOException e)
               {
                   e.printStackTrace();
               }
           }



       }
       catch (IOException e)
       {

       }

但是有三个问题:
1.我需要在192.168.11.2和1234端口接收数据包,但是当我声明datagramsocket时,我将其设置为空,因为如果我放置端口和地址,则发送代码无效;
2.如何管理 radio 接收到的数据包?我不需要使用地址和端口字节;
3.为什么要将超时放在循环之前?

谢谢你的回答。

最佳答案

1)仅使用您要使用的端口号创建数据报套接字。 DatagramSocket(p);

2)您有一个DatagramPacket,其字节缓冲区具有响应的大小和响应的长度,即:

int responseLength = 1024;
byte[] responseData = new byte[responseLength];
DatagramPacket response = new DatagramPacket(responseData, responseLength);

接收到此数据报包之后,您需要将其转换为发送时所用的同一对象。可能是这样的:
String s = new String(response.getData());

3)setSoTimeout不会导致消息等待100秒,只是说在100秒之后,如果receive()没有读入任何内容,则它将超时。每个连接只需要设置一次,不应该在循环中设置多次。

希望这可以帮助

关于android - 发送和接收数据报包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27905834/

相关文章:

安卓 Facebook 错误。 "Sorry something went wrong. We' 正在努力尽快解决这个问题”

android - 在 list 中注册应用程序类?

c - 在linux中用c获取文件信息

ios - Mac 应用程序和 iOS 应用程序之间的蓝牙/WiFi

java - android - 如何发送微调器的值?

java - 通过 Android Activity 类访问创建变量

IOS 连接到 BLE 设备 EXC_BREAKPOINT at didSelectRowAtIndexPath

android - 如何发送依赖于蓝牙 AVRCP 供应商并通过来自应用程序的命令?

c# - Socket ReceiveAsync 合并数据包

java - 如何仅使用标准网络库发送 HTTP 响应?