【问题标题】:how can I send an object over tcp socket to an android device?如何通过 tcp 套接字将对象发送到 android 设备?
【发布时间】:2012-12-03 01:15:39
【问题描述】:

我有一个用 java 编写的程序,它充当一种服务器。我需要通过 Tcp 套接字向手机发送一个对象。

在此之前,我只是通过PrintWriterDataInputStream 传递字符串数据。我打算尝试ObjectInputStream,但我听说这可能会由于不同的java版本等原因导致跨平台失败。我的对象是可序列化的。

【问题讨论】:

    标签: java android sockets tcp


    【解决方案1】:

    您可以使用诸如here 之类的 JSON 序列化程序将对象转换为非常易读的字符串,这样您就可以使用正常的 PrintWriter 系统。您只需将字符串写入流,然后在另一端恢复它。很简单。

    【讨论】:

    • 所有这些都作为一行发送?有没有像每行的套接字字符串大小限制这样的东西我应该知道这可能会使事情复杂化?我以前从未使用过 JSON
    • JSON 只是一种序列化——它非常流行。它不包含 Java 版本的元数据,这使它成为一个受欢迎的候选者。您也可以查看 protobuf。存在数据包的 MTU 限制,并且存在数据包被分段的可能性,但无论如何您都应该在代码中处理这个问题,因为 TCP 是一种流协议。如果您需要这方面的更多信息,请告诉我。
    • 好吧,考虑到没有研究,我不知道如何使用 protobuffer,MTU 限制我会说把我联系起来。这应该适用于将 ArrayList 作为对象发送也正确吗?最后,您的意思是我不必担心片段或大小限制,因为 TCP 的流协议本来就是要处理这些的吗?谢谢
    • TCP协议本身就是一个流协议。数据包不一定会一件接一件地到达。您可以查看此 SO 线程 stackoverflow.com/questions/5446409/… 了解更多信息,答案包含一些更详细的解释。此方法也适用于对象列表;因为 JSON 会自然地将它们分开。你如何解析这个当然取决于你。 MTU 限制只是数据包在不保证被分解的情况下可以达到的最大字节大小。你通常应该让数据包小于这个
    • 如果它必须更大怎么办?假设一个列表或对象包含的数据多于 MTU 限制。那么一般人会做什么呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    相关资源
    最近更新 更多