我的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查看传递内容,看看是否能提供任何见解。
答案 0 :(得分:1)
服务器是否也使用readUTF()
和writeUTF()
? writeUTF()
以readUTF(),
只能理解的唯一格式写入数据,而这些格式不会理解其他任何内容。
编辑 EOFException
表示没有更多数据。您应该单独捕获它并通过关闭套接字等来处理它。readUTF()
尝试读取未使用writeUTF().
当它真的是IOException
时,确定它是EOFException
意味着你没有打印或记录异常本身,只是它的消息。始终使用为异常提供的日志方法,或至少使用Exception.toString().
答案 1 :(得分:-1)
我记得有一天我遇到了DataInpuStream的问题......尝试这样做:
in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));