Android   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – UDP数据包(通过WiFi Direct)永远不会到达大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

那些阅读我之前的问题的人可能已经知道这一点:我目前正试图抓住整个WiFi Direct的东西.到目前为止我所做的就是创建连接.
我想要做的是通过UDP将数据包发送到groupowner(其IP当然是已知的) – 但它似乎每次都迷失方向.

这是我的一些代码,我有一个接收文件的服务和一个后台提交它们的intentservice:

FileReceiverservice.java

    @Override
    public void run() {
        Log.d(tag, "Thread starTing...");
        try {
            app.log("opening UDP socket to receive files.");
            DatagramSocket socket = new DatagramSocket(PORT);
            app.log("Socket open!");
            socket.setSoTimeout(5000);
            app.log("WaiTing for packet..");
            while (isRunning && !isInterrupted()) {
                DatagramPacket packet = new DatagramPacket(
                        new byte[WiFiPacket.PACKET_SIZE],
                        WiFiPacket.PACKET_SIZE);
                try {
                    socket.receive(packet);
                    app.log("Received " + packet.getLength()
                            + " bytes, trying to parse!");
                    parsePacket(packet);
                } catch (SocketTimeoutException E) {
                } catch (Exception E) {
                    app.log("Something went wrong: " + e.getmessage());
                    e.printStackTrace();
                }
            }
            socket.close();
            app.log("Closing UDP socket");
        } catch (Exception E) {
            e.printStackTrace();
        }
    }
@H_618_11@

常量WiFiPacket.PACKET_SIZE设置为1024 * 32(32 KB,因为我收到“ERRBLABLA MSG太长”错误,值较高).

FileTransferservice.java

@Override
protected void onHandleIntent(Intent intent) {
    App app = (App) getApplication();

    Context context = getApplicationContext();
    Boolean righTintent = false;
    WiFiFile file = null;

    if (intent.getAction().equals(ACTION_SEND_TEXT)) {
        righTintent = true;
        file = WiFiFile.fromText(intent.getExtras().getString(EXTRAS_TEXT));
    } else if (intent.getAction().equals(ACTION_SEND_FILE)) {
        righTintent = true;
        file = WiFiFile.fromFile(intent.getExtras().getString(
                EXTRAS_FILE_PATH));
    }
    if (righTintent && file != null) {

        app.getOnWiFiTransmissionChangedListener().onNewOutgoingTransfer(
                filE);
        String text = intent.getExtras().getString(EXTRAS_TEXT);
        String host = intent.getExtras().getString(
                EXTRAS_GROUP_owneR_ADDRESS);
        DatagramSocket socket = null;
        int port = intent.getExtras().geTint(EXTRAS_GROUP_owneR_PORT);
        Log.d(tag, "Sending packets to " + host + ":" + port);
        try {
            socket = new DatagramSocket();
            int bytesSent = 0;
            for (WiFiPacket p : filE) {
                Log.d(tag, "Preparing another packet..");
                byte[] payload = p.getBytes();
                DatagramPacket packet = new DatagramPacket(payload,
                        payload.length, InetAddress.getByName(host), port);
                Log.d(tag, "Sending packet..");
                socket.send(packet);
                bytesSent += payload.length;
                Log.d(tag, "Packet send! Contained " + payload.length
                        + " bytes! All over we've sent about " + bytesSent
                        + " bytes!");
                List<WiFiFile> list = new ArrayList<WiFiFile>();
                list.add(filE);
                app.getOnWiFiTransmissionChangedListener()
                        .onTransferProgressChanged(list);
            }

            app.getOnWiFiTransmissionChangedListener()
                    .onFileTransfersuccessful(filE);

            Log.d(tag, "Client: Data written");
        } catch (IOException E) {
            e.printStackTrace();
            Log.e(tag, e.getmessage());
        } finally {
            if (socket != null) {
                if (socket.isConnected()) {
                    socket.close();
                }
            }
        }

    }
}
@H_618_11@

代码可能不是最好的,但至于现在我唯一关心的是接收该死的数据包.

大佬总结

以上是大佬教程为你收集整理的android – UDP数据包(通过WiFi Direct)永远不会到达全部内容,希望文章能够帮你解决android – UDP数据包(通过WiFi Direct)永远不会到达所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: