我想与嵌入式设备通信以获取一些读数到我的android手机。套接字不发送任何东西,除非在调试模式下运行
public void ClickedLearn(View v){
create_connection();
request_packet();
Handler handler=new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
recieve_packet();
if(isLearned){
Savebtn.setVisibility(View.VISIBLE);
}
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
},5000);
}
private void recieve_packet() {
Thread t=new Thread(new Runnable() {
@Override
public void run() {
try {
InputStream instream;
instream = client.getInputStream();
int a = instream.available();
if (a > 0) {
InputStreamReader inputStreamReader = new InputStreamReader(instream);
BufferedReader reader = new BufferedReader(inputStreamReader);
final String Recievedstring = reader.readLine();
if (Recievedstring != null) {
Recieved_packet = Recievedstring;
isLearned=true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
t.start();
while(t.isAlive());
}
private void request_packet() {
OutputStream outstream;
try {
outstream = client.getOutputStream();
PrintWriter out = new PrintWriter(outstream);
String outputPacket="T";
textflag1=true;
out.print(outputPacket);
out.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
private void create_connection() {
final String text = "192.168.43.161:80";
final int port;
final String ipaddress;
if (text != null) {
String[] splitted = text.split(":");
ipaddress = splitted[0];
port = Integer.parseInt(splitted[1]);
Thread t = new Thread() {
public void run() {
try {
client = new Socket(ipaddress, port);
isConnected = true;
} catch (IOException e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Could not connect!", Toast.LENGTH_SHORT).show();
finish();
}
});
}
}
};
t.start();
while (t.isAlive()) ;
}
}
如果我在request_packet里放置了一个断点,那么在调试模式下一切正常。但它不会在正常模式下工作,因为outputstream上的字符串没有发送。但是代码没有抛出任何异常。我不明白是怎么回事 请帮我...
我在问题的代码片段中看不到'send_packet',它在服务器端吗? –
解决方案是阻止读取,直到数据到达,而不是试图摆弄时间。你不知道数据到达需要多长时间。 – EJP