IOException没有提供足够的信息

时间:2011-10-26 21:19:34

标签: java android

我的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,没有附加消息或原因。导致错误的特定行是String st = in.readUTF()。如果我注释掉那一行,我的代码运行正常(没有抛出异常),但我的服务器不承认任何数据已发送给它。当然,我没有得到任何数据,因为该行被注释掉了。

那么,我怎么能弄清楚问题是什么?今晚我将尝试通过wireshark查看传递内容,看看是否能提供任何见解。

2 个答案:

答案 0 :(得分:1)

服务器是否也使用readUTF()writeUTF()writeUTF()readUTF(),只能理解的唯一格式写入数据,而这些格式不会理解其他任何内容。

编辑 EOFException表示没有更多数据。您应该单独捕获它并通过关闭套接字等来处理它。readUTF()尝试读取未使用writeUTF().

写入的数据时,肯定会造成虚假处理。

当它真的是IOException时,确定它是EOFException意味着你没有打印或记录异常本身,只是它的消息。始终使用为异常提供的日志方法,或至少使用Exception.toString().

答案 1 :(得分:-1)

我记得有一天我遇到了DataInpuStream的问题......尝试这样做:

in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));