【问题标题】:sending objects through TCP socket from java server to android client通过 TCP 套接字将对象从 java 服务器发送到 android 客户端
【发布时间】:2012-12-01 15:25:56
【问题描述】:

我打算使用 objectOutputStream,但听说这是不可靠的,因为不同的 java 版本可能会以不同的方式反序列化对象。关于“可怕的跨架构实践......”的一些事情。

那么我还能如何在这些设备之间发送对象和数组,接收端可以将正确的对象或数组数据拼凑在一起?

【问题讨论】:

  • 简短回答 - 定义和实现服务器和客户端之间的数据交换协议(xml、json 等)
  • 这种方法与其他方法相比如何?这是最好的方法吗?如果是这样,为什么会这样?谢谢。 PS对于以前从未做过的人来说听起来很有趣:X

标签: java android sockets serialization tcp


【解决方案1】:

编辑:只需阅读您在做什么。您可能不需要 Web 服务器。很多人推荐一个,因为有大量的 Web 服务器支持。您当然使用 TCP 或 UDP 在服务器和客户端之间进行通信。如果要进行数据交换,则需要一些协议,这里的大多数人都熟悉 XML 或 JSON

如果您需要灵感,请尝试查看一些协议,例如 FTP,甚至是 Bittorrent

Web服务器案例:

我为大学家庭作业编写了一个 Java Web 服务器。如果您对 TCP/IP 有很好的了解,那么 Web 服务器实际上非常简单。代码散布在网上,虽然有点难以理解到底发生了什么,但一旦你这样做了,就不错了

您绝对应该查看 HTTP 的 RFC,即使这些内容往往是用法律术语表述的。除此之外,在服务器上,您基本上是逐行读取字符串,并且您应该能够弄清楚在服务器上要做什么(例如 GET /somefile.html HTTP/1.0)。只需在这些行上执行 System.out.println 并从那里开始。客户端代码也是如此。您还可以使用 telnet 来查看 Web 服务器的功能

为了进行测试,我实际上建议只尝试普通的网络浏览器,例如 Firefox、Chrome、IE、Safari,甚至 curl 脚本。这是一个简单的测试,可以查看您的服务器是否正常运行

就数据交换而言,建议使用 XML 或 JSON,主要是如果您学会如何处理它,您的简历将获得 100 经验点。但是,要开始使用,您可以从发送和接收诸如“Wazzzaaap”之类的文本开始。 Web 浏览器还可以获取 XML 和 JSON 数据。

【讨论】:

  • 我确实有点想避免使用网络服务器和 HTTP,除非很明显我的需求不适合当前的实现。那么如何使用 JSON 或 XML 来传输数组列表或更复杂的对象呢?
【解决方案2】:

通过'java server',你使用什么样的协议?

一个选项是 RPC,它在 java.rmi 中定义

如果你使用http,最简单的选择是在tomcat/jetty中实现一个小servlet并使用restful服务

数据格式可以是xml、json、bin等

【讨论】:

  • 它实际上只是一个用 java 编写的服务器。到目前为止,它所做的只是接收一个套接字: ServerSocket sock = new ServerSocket(9999);然后对于每个连接 Socket newsock = sock.accept();它创建一个线程来读取和响应传入的行。协议? TCP/IP 会是答案吗?我没有使用任何安宁的东西。
  • TCP 特别是答案
  • 啊,我想在标题和标签中都有这个。那么在这种情况下我的选择是什么?
  • 服务器套接字不会让你从服务器向客户端发送数据,它只是等待通信docs.oracle.com/javase/1.4.2/docs/api/java/net/…
  • 老实说,答案是“视情况而定”。您实际上可能不需要成熟的 Web 服务器。 TCP 适用于您需要可靠数据的情况,如果您不关心数据是否到达目的地,则可以使用 UDP。 Web 服务器的优势在于,它们背后有很多支持,并且经过试验和测试。但是,对于服务器和客户端之间真正的高性能交换,它可能不是理想的情况
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 2019-08-08
  • 2011-01-05
相关资源
最近更新 更多