有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

socket发送和接收Java对象

我正在寻找发送&;将Java对象接收到&;来自另一个Java应用程序。此应用程序可能位于另一台机器上。我需要这样做,因为我正在运行多个Java游戏服务器,并且需要它们都与一个中央服务器通信。我试着四处寻找一些关于如何做到这一点的建议,但什么也没找到

我想象一下,您首先为每个游戏服务器创建一个新线程,然后打开服务器的socket


共 (3) 个答案

  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. # 2 楼答案

    与其他答案不同的是,我不会建议使用ObjectStreams(尽管我不是下层选民)。当然,它们是直接发送Java对象的一种方法,但您并不真正想这样做。与其他流相比,ObjectStreams的行为也有点特殊

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

    你似乎没有太多的网络经验,所以你应该看看其他项目的例子

  3. # 3 楼答案

    你需要:

    ObjectOutputStreamObjectInputStream

    要使用这些方法,请实现一个名为 serializable在你们班上

    这里您将序列化employee类,即您可以共享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);
        }
    }
    

    现在,您只需使用sockets!将此文件发送到其他服务器或客户端即可

    希望这有帮助