java - IOException 没有提供足够的信息

标签 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 传递的内容,看看是否能提供任何见解。

最佳答案

服务器是否使用 readUTF()writeUTF()也? writeUTF()以独特的格式写入数据,只有 readUTF(), 才能理解它不会理解任何其他内容。

编辑 EOFException意味着没有更多数据了。您应该单独捕获它并通过关闭套接字等来处理它。它肯定可能是由 readUTF() 引起的。尝试读取未使用 writeUTF(). 写入的数据

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

关于java - IOException 没有提供足够的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7909062/

相关文章:

java - 更新到 Spring Boot 2.4.0 后,内存数据库中的 H2 不起作用

android - 如何在垂直 ListView 中制作可水平滚动的项目?

java - OnTouchListener JAVA 使用 Android Studio 删除限定符

Android 上的 Java - 威胁?

java - 不使用循环搜索字符串数组

java - 如何读取系统本地路径中存在的 Java 文件的所有方法

java - 如何将我自己的文本悬停到默认 Eclipse 编辑器中?

java - 使用变量名称标记形状的 2D 图形

android - 平台和设置说明?

Android(eclipse)PNG透明度显示为黑色(附图片示例)