我有一部安卓手机和一台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();
如能帮助提高通讯的可靠性,我们将不胜感激。非常感谢!
暂无答案!
目前还没有任何答案,快来回答吧!