我的 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/