2013-07-31 49 views
2

我得到以下EOFException同时使用readUTF()方法,请让我知道我是怎么克服这个问题,也请建议如何在其他网络EOFException类中的readUTF

import java.io.*; 
import java.net.*; 

public class GreetingServer { 
    public static void main(String args[]) { 
     String servername =args[0]; 
     int port = Integer.parseInt(args[1]); 

     try { 
      System.out.println("Server Name "+ servername +"Port"+port); 

      Socket client = new Socket(servername,port); 
      System.out.println("Just connected to"+ client.getRemoteSocketAddress()); 
      OutputStream outs = client.getOutputStream(); 
      DataOutputStream dout = new DataOutputStream(outs); 
      dout.writeUTF("Hello From"+client.getRemoteSocketAddress()); 
      InputStream in = client.getInputStream(); 
      DataInputStream din = new DataInputStream(in); 
      System.out.println("Server Says"+ din.readUTF()); 
      client.close(); 
     } 
     catch (EOFException f) { 
      f.printStackTrace(); 
     } 
     catch(IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+1

显示你的服务器端代码。问题应该在服务器端发送不正确/不完整的数据 – Tala

回答

1

docsreadUTF()传输插座信息readUtf()状态;

首先,读取两个字节并用于构造一个无符号的16位整数,与readUnsignedShort方法完全相同。这个整数值被称为UTF长度,并指定要读取的其他字节的数量。这些字节然后通过分组考虑将它们转换为 个字符。每个组的长度为 ,根据组的第一个字节的值计算得出。跟在一个组之后的字节 (如果有的话)是下一个组的第一个字节。

这表明,我认为你的努力与的readUTF()不是UTF,作为EOFException发生读取时End of File (EOF) is read unexpectedly.

检查你正在阅读的权利类型以相同的顺序,你的服务器正在发送它们等等。你应该遵循一个确定的协议,而不是盲目地阅读。

+0

EOFException也出现在* EOF *当然,当它遇到'预期'。 – EJP

4

您已到达流的末尾。没有更多数据可读。

也许您的服务器没有使用writeUTF(),或者你是不同步的。如果服务器写入行,你应该使用BufferedReader.readLine().

+0

如果它不是使用writeUTF写的,那么如何解决这个问题? –

+0

@AlexanderZaldostanov Err,不要调用'readUTF()'?如果它不是用'writeUTF()'写的,你不应该调用'readUTF()'。你应该调用别的东西,这取决于它的写法。 – EJP

+0

... readUTF()和writeUTF()也应该是相同的序列。 –