Я закодировал простой сервер, который прослушивает клиента, и когда клиент подключен, он открывает поток ввода данных, который считывает все данные, отправленные от клиента (мой клиент пишет данные UTF).
Это код сервера:
@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(dis.readUTF() != null){do the stuff}
- person Briesanji   schedule 07.02.2016while(true)...
неэффективны, и их следует избегать.EOFException
— это исключение конца файла. Так что это означает, что вы делаете что-то не так (возможно, читаете несуществующие вещи). - person xdevs23   schedule 07.02.2016while (true)
утверждений - 100% ерунда. Ничто не может быть более эффективным. - person user207421   schedule 07.02.2016