【发布时间】:2011-09-21 11:21:09
【问题描述】:
我正在 Android 上编写一个应用程序,我希望它能够知道服务器(我用 C 编写的)何时死机或关闭。我试图通过让服务器以指定的时间间隔向客户端(Android 应用程序)发送消息来实现这一点。如果这个消息没有出现,那么客户端就知道它不再连接到服务器了。它们使用 TCP 套接字进行通信。
我的问题是 Android 应用似乎无法读取服务器写入的内容。当它到达尝试从服务器套接字读取的代码的第一部分时,它只是挂起。在 Android 应用程序中,我使用 BufferedReader 从套接字 tmpstr = inFromServer.readLine(); 读取,其中 tmpstr 是一个字符串,inFromServer 是 BufferedReader,而 C 服务器只使用写入 write(newsockfd,"I got your message",18);。
我还尝试使用替代 Java 服务器来查看我的基本程序逻辑是否错误。测试服务器使用了 PrintWriter,它与 Android 客户端完美配合。
我在这里缺少什么? Java 和 C 缓冲(或不缓冲)它们的数据的方式有区别吗?如果我需要提供任何其他信息,请告诉我。
编辑:让 C 服务器读取从客户端发送的数据也没有问题。我只是无法让客户端读取从服务器发送的数据。
编辑:问题已通过在服务器发送给客户端的内容中添加换行符 (\n) 得到解决。
【问题讨论】:
-
不会 readLine 等待换行吗?但是,我看不到您发送换行符...
-
你试过给它发送换行符
"\r\n"吗? -
Java 是否会自动将换行符附加到它发送的数据中?我使用
outToServer.println("some string");并且服务器能够很好地读取它。编辑:我会尝试发送换行符,看看是否有帮助。我会尽快返回结果。 -
println 添加换行符
-
添加换行符有效,非常感谢。由于某种原因,换行符从未出现在脑海中。我已经坚持了几个小时。如此简单的修复...