我編寫了一個簡單的Server來監聽客戶端,當客戶端連接時,它打開一個Datainputstream,讀取客戶端發送的所有數據(我的客戶端UTF數據)。EOFException使用readUTF的DataInputStream
這是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語句之前放置一個if語句,如'if(dis.readUTF()!= null){做這個東西}' – Briesanji
是的,我已經嘗試過了。但它不起作用..它引發異常但是它不會一次打印數據。所以我認爲這比以前更糟糕...... –
'while(true)...'語句效率不高,應該避免。 'EOFException'是文件異常結束。所以這意味着你做錯了事(也許讀不存在的東西)。 – xdevs23