你好我尝试用我的java应用程序读取一个未确定的行数(1到150之间,每行是vontaines在一个数据包中,并且数据包包含1个数字和1个文本)(当客户端之间的连接时服务器已建立)但似乎它的工作在一半。我只收到2到3行,有人可以帮助我吗?
class test implements Runnable {
@Override
public void run() {
try {
while(true){
DataInputStream reader = new DataInputStream(socket.getInputStream());
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(socket.getInputStream()));
int tailleMessage = reader.readUnsignedShort();
if (reader.available() < tailleMessage ){
return;
}
while (( messagep = inFromClient.readLine()) != null){
tailleMessage = reader.readUnsignedShort();
final String azrty = messagep;
if(!azrty.isEmpty()){
mHandler.post(new Runnable() {
@Override
public void run() {
Chat.TextChat.append("\n"+azrty);
}
});
}
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
Log.d("erreur",e.toString());
}
}
}
答案 0 :(得分:1)
您不能在Socket上同时使用BufferedReader和其他输入流。缓冲区将“窃取”输入流中的数据。您需要相应地重新设计协议。可能你应该使用writeUTF()/ readUTF()来发送字符串,而不是将它们作为行发送。或者是sibyl你应该使用ObjectInput / OutputStreams。