【问题标题】:sending serialization file via sockets in java在java中通过套接字发送序列化文件
【发布时间】:2013-05-21 10:41:57
【问题描述】:

System.out.println("Java is awesome!");

请原谅我的热情;我简直不敢相信 Java 有多么强大,它不仅能够保存对象(并加载它们),而且它的主要目的是通过网络发送它们。这正是我必须做的,因为我正在进行 beta 测试。在这个 beta 测试中,我给了测试者一个游戏版本,它将数据作为对象保存在大多数人不知道的位置(我们是开明的人哈哈哈)。这可以很好地工作,但它并不意味着长期坚持。但是,我可以通过一些客户端/服务器与套接字的交互来收集他们的record.sercounter.bin 文件(后者告诉我record.ser 中有多少对象)(在我开始阅读之前我对此一无所知,但我仍然感到无能为力)。我在网上看到的大多数示例(例如:http://uisurumadushanka89.blogspot.com/2010/08/send-file-via-sockets-in-java.html)都将文件作为字节流发送,即一些 ObjectOutputStream 和 ObjectInputStream。这正是我当前版本的游戏用来保存/加载 GameData 的内容。

很抱歉这个冗长的介绍,但你知道我必须做什么(逐步,所以我可以理解)来实际发送整个文件。我是否必须逐字节(或逐个对象)重建文件?

【问题讨论】:

  • 您不发送文件,而是发送序列化对象本身。所以在 ObjectOutputStream 下面使用服务器套接字的输出流。
  • 我希望这是一个答案,所以我可以投票并将其标记为已接受的答案

标签: java sockets serialization file-upload client-server


【解决方案1】:

其实很简单。只需使您的对象可序列化,并创建一个 ObjectOutputStream 和 ObjectInputStream 连接到您拥有的任何底层流,例如 FileInputStream 等。然后只需将您想要的任何对象写入流并在另一端读取它。

这是给你的example

对于套接字,它将类似于

ObjectOutputStream objectOut = new ObjectOutputStream(serverSocket.getOutputStream());
ObjectInputStream objectIn = new ObjectInputStream(clientSocket.getInputStream());

【讨论】:

  • 我已经完成了第一部分:使对象可序列化。事实上,这就是 GameData 在计算机上的存储方式;作为序列化的对象。你知道是否有任何方法可以跟踪谁将 GameData 发送给我(因为互联网上的任何人都可以这样做)?哦,我从来没有搞乱客户端-服务器交互或套接字。
  • 这个问题更像是一个与建议相关的问题:如果 beta 测试者的机器正在向我发送 GameData(它将)到我的计算机,这是否会使我的计算机成为服务器而他们的计算机成为客户端? //我的电脑将把他们的 GameData 写入数据库。
  • 怎么会有人向你的套接字发送数据。套接字 = IP + 端口,这对您来说非常具体。如果 Beta 测试者的机器正在向您发送数据,则它们是服务器,而您是客户端。
  • 告诉我,@Aniket Thakur,如何保存在线游戏的分数? (就客户端-服务器而言)
  • 客户端-服务器是相对术语。当您说您正在在线玩游戏时,这意味着您正在某些服务器上玩游戏(您的计算机是客户端)。现在您正在保存 beta-tester 的机器正在向您发送一些数据,这意味着您(作为客户端)将要求机器(服务器)为您提供游戏数据。请注意,您不是唯一一个(客户端)玩游戏的人,因此也不是唯一一个获取游戏数据的人。最后,您说您将获取的数据存储在某个数据库中。这将再次使您成为客户端,并将您的数据库托管的基础架构作为您的服务器。
【解决方案2】:

Java 序列化是一个非常强大的协议。 java.io.ObjectOutputStreamjava.io.ObjectInputStream 是更高级别的类,它们当然包含在较低级别的类中,例如 FileInputStreamFileOutputStream。我的问题是,当整个文件可以在Objects 中读取时,为什么要逐字节读取文件。

这是对该过程的一个很好的解释。

http://www.tutorialspoint.com/java/java_serialization.html

【讨论】:

  • 逐字节读取文件从来都不是我的本意。
猜你喜欢
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
相关资源
最近更新 更多