Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 发送和接收数据报包_Android_Sockets_Bluetooth - Fatal编程技术网

Android 发送和接收数据报包

Android 发送和接收数据报包,android,sockets,bluetooth,Android,Sockets,Bluetooth,对不起,我的英语不好。我必须使用android上的蓝牙pan接口从手机到收音机发送和接收数据。这是我实现发送的代码,我已将其放入AsyncTask的函数DoInBackground(): try { ds = new DatagramSocket(); byte buf[] = "Ciao".getBytes(); DatagramPacket msg = new DatagramPacket(bu

对不起,我的英语不好。我必须使用android上的蓝牙pan接口从手机到收音机发送和接收数据。这是我实现发送的代码,我已将其放入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时,我将其设置为void,因为如果我输入端口和地址,发送代码就不起作用; 2.如何管理收音机接收到的数据包?我不需要使用地址和端口字节; 3.为什么我把超时放在循环之前

谢谢您的回答。

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

2) 您有一个数据包,其中包含响应大小和响应长度的bytebuffer,即:

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

希望这有帮助