Я закодировал простой сервер, который прослушивает клиент и когда клиент подключен, открывает Datainputstream, который считывает все данные, отправленные с клиента (мои клиентские данные UTF).EOFException DataInputStream с использованием readUTF
Это ServerCode:
@Override
public void run() {
// TODO Auto-generated method stub
try {
ServerSocket ss = new ServerSocket(7000);
while(true){
System.out.println("Il Server sta cercando Connessioni");
Socket s = ss.accept();
System.out.println("Il Server ha accettato un Client");
Thread t2 = new Thread(new Runnable(){
public void run(){
try {
while(true){
DataInputStream dis = new DataInputStream(s.getInputStream());
isAlreadyOpened = true;
System.out.println(dis.readUTF());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
isAlreadyOpened = false;
}
}
});
if(!isAlreadyOpened){
t2.start();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Это очень простой и мой клиент является Andorid приложение, которое передачи данных при нажатии на кнопку:
@Override
public void onClick(View v) {
try {
DataOutputStream out = new DataOutputStream(s.getOutputStream());
out.writeUTF("Testiamo sto socket");
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Все прекрасно, когда клиент подключен к серверу. Но когда я нажимаю только один раз кнопку Клиента, отправленные данные отображаются в моих журналах сервера, но сразу после исключения.
Il Server sta cercando Connessioni
Il Server ha accettato un Client
Il Server sta cercando Connessioni
Testiamo sto socket
java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
чтение из документации Oracle это исключение выбрано <>. Но как я могу избежать этого?
Вы пытались поставить оператор if перед readuTF как 'if (dis.readUTF()! = Null) {do the stuff}' – Briesanji
Да, я попробовал. Но это не сработает .. он выдает исключение, но он не печатает ни один раз данные. Поэтому я думаю, что это хуже, чем раньше. –
'while (true) ...' заявления неэффективны и их следует избегать. 'EOFException' - это исключение из файла. Таким образом, это означает, что вы делаете что-то неправильно (возможно, чтение материала, которого не существует). – xdevs23