笔记本电脑和android之间的wifi连接不可靠

snvhrwxg  于 2021-07-11  发布在  Java
关注(0)|答案(0)|浏览(191)

我有一部安卓手机和一台ubuntu笔记本电脑。手机处于热点模式,笔记本电脑通过wifi连接。不涉及互联网,只有这两个设备。android运行一个服务器应用程序(java),膝上型电脑运行一个客户端应用程序(也是java)。客户端向服务器发送一个字节。服务器将该字节作为检查发送回客户端。如果客户端没有取回该字节,它将重新发送该字节,并且该过程最多继续10次。
如果手机距离笔记本电脑10厘米以内,工作正常。如果手机在一米远的地方,可靠性会受到很大影响。有时我需要4到8次尝试,有时即使尝试10次也失败了。我可以归咎于硬件,但wifi文件传输应用程序在相同的两个设备之间运行得相当好,即使它们相距1米。我的代码好像漏掉了什么。
客户端代码的相关部分(笔记本电脑):

Socket s = new Socket("192.168.43.1",4321);
            OutputStream dos = new DataOutputStream(s.getOutputStream());
            BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
            boolean ok = false;
            int nTry=0;
            for(int i=0;i<10;i++) {
                int check;
                System.err.print("sending "+what);
                dos.write(what);
                System.err.println("done.");
                Thread.sleep(100);
                if(bis.available()==0) continue;
                check = bis.read();
                System.err.format("received = %d\n",check);

                if(what==check) {
                    ok = true;
                    nTry = i;
                    break;
                }
            }

            if(ok) 
                System.err.println("Done after "+nTry+" attempt(s).");
            else
                System.err.println("Undone.");

以下是服务器代码(电话)的相关部分:

public void run() {
                Log.d("emni","on a different thread");
                try {
                    ServerSocket sok = new ServerSocket(4321);
                    Log.d("emni","server socket = "+sok);
                    master: while(true) {
                        Socket s = sok.accept();
                        Log.d("emni", "client socket = " + s);
                        BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
                        OutputStream os = s.getOutputStream();
                        Log.d("emni", "in = " + bis);
                        Log.d("emni", "out = " + os);
                        while (bis.available() == 0);
                        int b = bis.read();
                        Log.d("emni", "read = " + (char) b);
                        os.write(b);
                        Log.d("emni", "sent feedback");
                        fromLap(b);
                        if(b=='x') break master;

                    }
                }
                catch (Exception ex) {
                    Log.d("emni","Can't start server!");
                    Log.e("emni",Log.getStackTraceString(ex));
                }

            }
        };
        Thread t = new Thread(r);
        t.start();

如能帮助提高通讯的可靠性,我们将不胜感激。非常感谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题