Java socketandroid读取字符串时出现错误
我有一个Android应用程序。此应用程序有不同的线程。每个线程都是一个套接字客户端TCP。服务器每秒向我发送320个字符。通常连接是稳定的,可以正确地接收字符串,但有时一个套接字或所有套接字停止接收数据,并且在(5秒到50秒)之后的几秒钟内,套接字继续接收数据 我失去了这次的信息。我不能丢失这个信息,这是非常重要的。我尝试在C、C++和java中做服务器套接字,这种情况总是发生,bug时间是偶然的,例如运行APP OK 2小时,然后出现bug。前几天我运行了这个应用程序,4分钟后错误出现了。我在我的Nexus5、索尼平板电脑Z3Compact中运行该应用程序,我认为SDK中的套接字存在问题,因为所有设备都会传递 我发布一些代码来了解我的代码。我不得不说CPU的使用率是4%。最后,当套接字客户端不读取时,服务器会不断发送数据,但这些数据在Android应用程序中丢失。我检查了Linux PC中的客户端套接字,在Raspberry Pi、C、Java中,这个问题从未发生过 我尝试在Android中使用Java.Nio sockets,最后一次尝试使用NDK来查看是否在低级别也出现了这个问题。有人有类似的问题或bug吗?有人能帮我吗Java socketandroid读取字符串时出现错误,java,android,c,sockets,Java,Android,C,Sockets,我有一个Android应用程序。此应用程序有不同的线程。每个线程都是一个套接字客户端TCP。服务器每秒向我发送320个字符。通常连接是稳定的,可以正确地接收字符串,但有时一个套接字或所有套接字停止接收数据,并且在(5秒到50秒)之后的几秒钟内,套接字继续接收数据 我失去了这次的信息。我不能丢失这个信息,这是非常重要的。我尝试在C、C++和java中做服务器套接字,这种情况总是发生,bug时间是偶然的,例如运行APP OK 2小时,然后出现bug。前几天我运行了这个应用程序,4分钟后错误出现了。我
Date last_data = new Date();
InetAddress serverAddr = InetAddress.getByName(ip);
Socket socket = new Socket(serverAddr, port);
while(socket.isConnected()){
byte[] data_read = new byte[514];
//if(socket.getInputStream().available() > 0){
count = socket.getInputStream().read(data_read);
String read = new String(data_read).substring(0, count);
Date now = new Date();
long time = now.getTime() - last_data.getTime();
//long diffInSec = TimeUnit.MILLISECONDS.toSeconds(time);
if(time > 1200){
Log.d("LOG", "ERROR SOCKET TCP " + this.ip + ":" + this.port + " - Time: " + String.valueOf(time));
}
if (!read.isEmpty()) {
//Do something
//Renew Last data receive
last_data = new Date();
}else{
//Never entry
}
//}
}
谢谢你的阅读和帮助
String read = new String(data_read).....
那应该是
String read = new String(data_read, 0, count).....
注意:测试
isConnected()
不是终止该循环的正确方法。当对等机断开连接时,它不会神奇地变成错误。当代码< > Read()/代码>返回1或有一个“代码> iOExtExo/<代码>以外的读取超时。<此代码>不是C++,但您标记为代码> C++ >代码>。我的问题在Socket。GETInPoT流()中。即使服务器正在发送数据,他也阻止并不读取数据。秒后继续读取更多数据,但不明白为什么不读取一些秒。