发送&接收Java对象

时间:2014-02-16 08:55:08

标签: java sockets

我想寄送&接收Java对象&来自另一个Java应用程序此应用程序可能在另一台机器上。我需要的是,我正在运行多个Java游戏服务器,并且需要它们与一个中央服务器通信。我已经尝试过关于如何做到这一点的一些指示但却一无所获。

我想你开始为每个游戏服务器创建一个新线程,然后打开一个Socket到服务器。

3 个答案:

答案 0 :(得分:3)

你需要:

ObjectOutputStreamObjectInputStream

要使用这些方法,请实现一个名为的接口 你班上的serializable

在这里,您将序列化employee类,即您可以共享员工类的对象

演示:

public class employee implemetns serializable
{
}

public class SerializeDemo 
{
   public static void main(String [] args)
   {
      Employee e = new Employee();
      e.name = "Reyan Ali";
      e.address = "Phokka Kuan, Ambehta Peer";
      e.SSN = 11122333;
      e.number = 101;
      try
      {
         FileOutputStream fileOut =
         new FileOutputStream("/tmp/employee.ser");
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
         out.writeObject(e);
         out.close();
         fileOut.close();
         System.out.printf("Serialized data is saved in /tmp/employee.ser");
      }catch(IOException i)
      {
          i.printStackTrace();
      }
   }
}


public class DeserializeDemo
{
   public static void main(String [] args)
   {
      Employee e = null;
      try
      {
         FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");
         ObjectInputStream in = new ObjectInputStream(fileIn);
         e = (Employee) in.readObject();
         in.close();
         fileIn.close();
      }catch(IOException i)
      {
         i.printStackTrace();
         return;
      }catch(ClassNotFoundException c)
      {
         System.out.println("Employee class not found");
         c.printStackTrace();
         return;
      }
      System.out.println("Deserialized Employee...");
      System.out.println("Name: " + e.name);
      System.out.println("Address: " + e.address);
      System.out.println("SSN: " + e.SSN);
      System.out.println("Number: " + e.number);
    }
}

现在您可以使用套接字将此文件发送到其他服务器或客户端!。

希望这会有所帮助

答案 1 :(得分:1)

你应该看看 http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html
http://docs.oracle.com/javase/7/docs/api/java/io/ObjectOutputStream.html
http://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html
http://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html

您可以使用它们在应用之间发送/接收原始值或对象。是的,您可以使用Thread(用于同时处理服务器上的2个或更多客户端),Socket(作为应用之间的通信渠道)和ServerSocket(收听)来自服务器端客户端的传入连接)。

答案 2 :(得分:1)

与其他答案不同,我不打算建议ObjectStreams(虽然我不是downvoter)。当然,它们是直接发送Java Objects的一种方式,但您并不是真的想这样做。与其他流相比,ObjectStreams的行为也特别明显。

映射您需要在服务器/客户端之间传输的信息,然后围绕该设计协议。您可以使用二进制协议,甚至发送类似JSON的内容,但发送完整对象很可能不是最好的主意。

您似乎没有很多网络经验,因此您应该从其他项目中查找一些示例。