Java IOException没有提供足够的信息

Java IOException没有提供足够的信息,java,android,Java,Android,我的android程序坏了。我使用的是普通的客户机-服务器套接字。我已经用telnet测试了我的服务器,它运行得很好,但是当我用android程序尝试它时,它一秒钟内就不能运行更多的细节。这是我的密码: Socket s = null; try { String SocketServerAddress = db.getPhSsServerAddress(); Integer SocketServerPort = db.getPhSsServerPort(); s =

我的android程序坏了。我使用的是普通的客户机-服务器套接字。我已经用telnet测试了我的服务器,它运行得很好,但是当我用android程序尝试它时,它一秒钟内就不能运行更多的细节。这是我的密码:

 Socket s = null;
 try
 {
    String SocketServerAddress = db.getPhSsServerAddress();
    Integer SocketServerPort = db.getPhSsServerPort();
    s = new Socket(SocketServerAddress, SocketServerPort);
    Log.d(MY_DEBUG_TAG, "Setting up Socket: " + SocketServerAddress + ":" + SocketServerPort);
    DataOutputStream out = new DataOutputStream(s.getOutputStream());
    DataInputStream in = new DataInputStream(s.getInputStream());
    Log.d(MY_DEBUG_TAG, "Connected to: " + s.getInetAddress() + " on port " + s.getPort());

    out.writeUTF("Helo, Server");
    out.flush();
    Log.d(MY_DEBUG_TAG, "Bytes written: " + out.size());
    String st = in.readUTF();

    Log.d(MY_DEBUG_TAG, "SocketServerResponse: " + st);
 }
 catch (UnknownHostException e) 
 {
    Log.e(MY_ERROR_TAG, "UnknownHostException: " + e.getMessage() + "; " + e.getCause());
   } 
 catch (IOException e) 
   {
    Log.e(MY_ERROR_TAG, "IOException: " + e.getMessage() + "; " + e.getCause() + "; " + e.getLocalizedMessage());
   }
 finally
 {
    try {
            s.close();
        } catch (IOException e) {
        Log.e(MY_ERROR_TAG, "IOException on socket.close(): " + e.getMessage() + "; " + e.getCause());
        }
 }
我在这里得到的只是一个抛出的IOException,没有附加任何消息或原因。导致错误的特定行是字符串st=in.readUTF。如果我注释掉那一行,我的代码运行良好,没有抛出异常,但我的服务器不确认有任何数据发送到它。当然,我没有得到任何数据,因为这一行被注释掉了


那么,我怎样才能找出问题所在呢?今晚,我将尝试看看wireshark传递了什么,看看这是否提供了一些见解。

我记得有一天我在DataInpuStream上遇到了问题。。。尝试这样做:

in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
服务器是否也使用readUTF和writeUTF?writeUTF以唯一的格式写入数据,该格式只能由readUTF理解,而readUTF不理解其他任何内容

编辑EOFEException意味着没有更多数据。您应该单独捕获它并通过关闭套接字等方式处理它。readUTF尝试读取未使用writeUTF写入的数据肯定会导致错误


当它实际上是一个EOFEException时,确定它是一个IOException意味着你没有打印或记录异常本身,只是它的消息。总是使用为异常提供的日志方法,或者至少使用ExtExto.ToSt../P>您应该考虑在所有日志.E方法的末尾添加异常。他们可以做etag,msg或etag,msg,throwable。如果你记录了完整的抛弃,你可能会得到更多的信息。可悲的是,这没有帮助@格雷,谢谢你的提示。我以前从未见过这种情况。我记录了Log.eMY_ERROR_标记,IOException:+e.getMessage+;+e、 getCause+;+e、 getLocalizedMessage,e;在eclipse中,我看到了日志语句后面的完整错误。看起来这是一个java.io.EOFException。我真的不知道该怎么修那个天哪,就是这样。哇,我一整天都在解决这个问题。谢谢你的提示。我看到了你的编辑,还有更多的问题。以前,我决定它是一个IOException,因为这是我在日志中看到的:IOException:null,null,null。空值是因为getMessage、getCause和getLocalizedMessage都返回空值???我在网上找到了这段代码,没有想到是否还有其他异常。你能给我一个好的日志方法的例子,以打印出有用的信息作为你的建议吗?@MrGibbage你已经有好几个建议了。我不知道您是如何获得输出的,但它不可能是通过调用我使用过的任何特定于异常的日志方法得到的。只是检查一下,但大多数时候这些EOFEException不会有错误消息,对吗?