【问题标题】:Recive different type of objects on the same TCP socket在同一个 TCP 套接字上接收不同类型的对象
【发布时间】:2012-11-14 14:57:27
【问题描述】:

所以这是交易: 我有一个正在运行的服务器,它不断地通过 TCP 套接字接受客户端:

public ArrayList<Socket> lista_users = new ArrayList<Socket>();

套接字;

            s = serverSocket.accept();

            lista_users.add(s);
            avisa_all(lista_users, s);

            Thread t_trata_cliente = new Thread(new trata_cliente(lista_users, s));
            t_trata_cliente.start(); //this Thread is responsable for interacting with
                                    //the clients (where my question is)

将套接字保存在数组列表中。 在我想向我的客户发送不同类型的信息之后(线程“trata_cliente”)。 当我说不同类型的信息时,我的意思是,首先发送一条警告消息,然后发送一个对象,然后发送一些消息,然后再次发送对象。

最好的方法是什么?

【问题讨论】:

  • 接收方也是java应用吗?
  • 是的,它是一个基于 java 的客户端。
  • 没有“最佳”协议。有难以编码和解码(和版本)的“最密集”协议,然后是 Java 的原生序列化协议,它对短消息效率不高,然后是 JSON,然后是压缩 JSON……
  • 这是一个更好地解释我自己的例子:服务器接受了一个客户端,如果将向所有客户端发送通知消息+(我不确定我是否必须再次发送新的用户数组列表) .然后,当服务器收到“message1”时,他会向所有用户发送一个对象(例如日历),依此类推......所有这些都使用 ObjectOutputStream,如果可能的话 xd

标签: java sockets tcp tcpclient


【解决方案1】:

用适当的包装器封装套接字的输出流:

【讨论】:

  • 这在“最佳”的至少两个定义下是正确的。点赞。
  • 但是我的客户怎么知道他收到的是什么类型的对象?因为我的服务器可以发送日历类型或数据,或其他东西...我需要一个系统,以便客户端可以识别接收对象的类型...谢谢
  • @DmitryKvochkin ObjectOutputStream 处理打字。你只需要在接收端做instanceof..
  • 如果接收端不知道是期望对象还是原始类型,则始终发送(并期望)对象。
  • @DmitryKvochkin 简单地说,如果您通过ObjectOutputStrema 发送对象,则通过ObjectInputStream 读取它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
相关资源
最近更新 更多