java - 连接到 Java 客户端的 C 服务器套接字问题

标签 java android c tcp

我正在 Android 上编写一个应用程序,我希望它能够知道服务器(我用 C 编写)何时死机或关闭。我试图通过让服务器以指定的时间间隔向客户端(Android 应用程序)发送消息来实现这一点。如果没有收到此消息,则客户端知道它不再连接到服务器。它们使用 TCP 套接字进行通信。

我的问题是 Android 应用程序似乎无法读取服务器写入的内容。当它到达尝试从服务器套接字读取的代码的第一部分时,它只是挂起。在 Android 应用程序中,我使用 BufferedReader 从套接字中读取 tmpstr = inFromServer.readLine(); 其中 tmpstr 是一个字符串,inFromServer 是 BufferedReader,而 C 服务器只是使用 write write(newsockfd,"我收到你的消息",18);.

我还尝试使用替代的 Java 服务器来查看我的基本程序逻辑是否有误。测试服务器使用了 PrintWriter,它与 Android 客户端完美配合。

我在这里错过了什么? Java 和 C 缓冲(或不缓冲)它们的数据的方式有区别吗?如果我需要提供任何其他信息,请告诉我。

编辑:我也很容易让 C 服务器读取从客户端发送的数据。我唯一的问题是让客户端读取从服务器发送的数据。

编辑:通过向服务器发送给客户端的内容添加换行符 (\n) 解决了该问题。

最佳答案

如果我没记错的话,readLine() 在读取整行之前不会返回结果。它会一直阻塞到那时。您没有从 C 程序发送整行。

您不仅没有发送整行(\n 终止),而且您甚至没有发送整个 C 字符串,因为您没有发送空终止符(您的 C 字符串实际上包含 19 个字符,而不是 18 ,如果您包括空终止符)。我不记得 Java 使用什么类型的字符串格式,是否以 null 终止,但这部分可能无关紧要,因为它正在寻找\n,而不是\0。

尝试从 C 服务器发送“我收到你的消息\n”,然后让我们知道会发生什么。

糟糕,我才发现这个问题已经在评论中得到了回答。那好吧。人们真的应该将答案作为答案发布。

关于java - 连接到 Java 客户端的 C 服务器套接字问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6458757/

相关文章:

android - 在应用程序之间共享可绘制对象

c - 遍历空终止数组

c - 如何在该程序中利用缓冲区溢出并将参数传递给 system() 函数?

c - C 中的全局变量

javax.ws.rs.NotSupportedException : Could not find message body reader for type: class com. sun.jersey.core.header.FormDataContentDisposition

java - 如何解决这个 OutOfMemoryError : Java heap space

java - 使用客户端-服务器拓扑时,从 Hazelcast 中的 IMap 中的 MongoDB 加载数据

Java算法制作直角金字塔

java - 收到 Android 推送通知后更新 UI

android - 如何在Android中创建动态Sqlite数据库