2016-04-08 32 views
-1

'dan çalışırken bir Java Socket istemcisi çalıştırırken java.io.EOFException verir. İlk kez veya ilk birkaç kez çalıştırırsanız çalışır. Ancak, yarım günlük hata ayıklandıktan sonra, TCP soketini okuyan DataInputStream'in readByte() yöntemi java.io.EOFException'ı atar. Eclipse'i yeniden başlatırsam veya aynı java kodunu tek başına çalıştırırsam sorun olmaz. Sanırım, Eclipse'in Java kodunu çalıştırması/hata ayıklamasıyla ilgili bir şey var. Her nasılsa, programda hata ayıkladığımız ve daha sonra yayınlanmadığı zamanlarda bazı kaynaklar kullanılır. Kimse biliyor mu?Benim java soket programı, Eclipse

Burada bir while(true) (hatta ilk etapta bir while(true) döngü var) dışarı break için iyi bir uygulama değildir, kod Genelde

//DataInputStream is set outside of the scope. 

DataInputStream dataInputStream; 

StringBuffer stringBuffer = new StringBuffer(); 
while(true) 
{ 
    // java.io.EOFException is thrown at the line below. 
    byte c = dataInputStream.readByte(); 
    if(c == 0) { 
     break; 
    } 
    stringBuffer.append((char)c); 
} 
+3

sadece herhangi bir kod olmaksızın sadece tahmin. Bir cevap almak için kodunuzu ve stacktrace'inizi eklemek isteyebilirsiniz. – SomeJavaGuy

+0

kod snippet eklendi. –

+1

Belki de diğer taraf yuvaya zaman ayırır ve kapatır. –

cevap

-1

olduğunu. Sadece bir bayt == 0, bir veri akışının sonuna ulaştığınız anlamına gelmez. Null bir bayt (Java'da 0) değerini okumak yerine (available() gibi bir şey kullanarak) akıştan okunabilecek daha fazla veri olup olmadığını kontrol etmelisiniz. Basit bir düzeltme bu çizgisinde bir şey görünebilir:

DataInputStream dataInputStream; 

StringBuffer stringBuffer = new StringBuffer(); 
while(dataInputStream.available() > 0) 
{ 
    byte c = dataInputStream.readByte(); 
    stringBuffer.append((char)c); 
} 

Bu EOF ulaşıldığında durağı yanı sıra, StringBuffer karakter eklemek devam etmelidir.

+0

Bu bir anlam ifade etmiyor çünkü kodun bu kısmı genellikle işe yarıyor, sadece Eclipse içinde ve yarım gün çalıştıktan sonra çalışmayı durdurur. –

+0

@AlbertCheng Göndermiş olduğunuz kod dikkate alındığında, aklıma gelen tek çözüm budur. Sorunuz, bu cevabın çözmeyi denediği bir EOF İstisnası'na sahip olmanızdan çok fazla bir şey açıklamıyor. –