发送和接收数据报包

时间:2015-01-12 15:52:08

标签: android sockets bluetooth

抱歉我的英语不好。我必须使用android上的蓝牙盘接口从手机发送和接收数据到无线电。这是我已经实现发送的代码,我已将其转换为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.如何管理收音机收到的数据包?我不需要使用地址和端口字节; 3.为什么我要在循环之前设置超时?

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

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()没有读入任何内容则会超时。这只需要为每个连接设置一次,不应该在循环期间多次设置。

希望这有帮助