Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在同一TCP套接字上接收不同类型的对象_Java_Sockets_Tcp_Tcpclient - Fatal编程技术网

Java 在同一TCP套接字上接收不同类型的对象

Java 在同一TCP套接字上接收不同类型的对象,java,sockets,tcp,tcpclient,Java,Sockets,Tcp,Tcpclient,这就是交易: 我有一台服务器正在运行,它不断地通过TCP套接字接受客户端: public ArrayList<Socket> lista_users = new ArrayList<Socket>(); 保存数组列表上的套接字。 在我想向我的客户发送不同类型的信息之后,Thread trata_客户。 当我说不同类型的信息时,我的意思是,首先发送警告消息,然后发送对象,然后发送一些消息,然后再次发送对象 最好的方法是什么?使用适当的包装器封装套接字的输出流: :发送基本

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

public ArrayList<Socket> lista_users = new ArrayList<Socket>();
保存数组列表上的套接字。 在我想向我的客户发送不同类型的信息之后,Thread trata_客户。 当我说不同类型的信息时,我的意思是,首先发送警告消息,然后发送对象,然后发送一些消息,然后再次发送对象


最好的方法是什么?

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

:发送基本数据类型+字符串。 :通过流发送对象。
使用适当的包装器封装套接字的输出流:

:发送基本数据类型+字符串。 :通过流发送对象。

接收器也是java应用程序吗?是的,它是基于java的客户端。没有最好的协议。有最密集的协议,很难编码、解码和版本,还有Java的原生序列化协议,对短消息来说效率不高,还有JSON,还有压缩的JSON…下面是一个更好地解释我自己的例子:服务器接受了客户端,if将向所有客户端发送通知消息+我不确定是否必须再次发送新的ArrayList用户。然后,当服务器收到消息1时,他向所有用户发送一个对象,例如日历,等等……所有这些都使用ObjectOutputStream,如果可能的话,接收方也是java应用程序吗?是的,它是基于java的客户机。没有最好的协议。有最密集的协议,很难编码、解码和版本,还有Java的原生序列化协议,对短消息来说效率不高,还有JSON,还有压缩的JSON…下面是一个更好地解释我自己的例子:服务器接受了客户端,if将向所有客户端发送通知消息+我不确定是否必须再次发送新的ArrayList用户。然后,当服务器收到消息1时,他会向所有用户发送一个对象,例如日历,等等……所有这些都使用ObjectOutputStream,如果可能的话,至少在两个best定义下是正确的。但是我的客户怎么知道他收到的是什么类型的东西呢?因为我的服务器可以发送日历类型、数据或其他信息…我需要一个系统,以便客户端能够识别接收对象的类型。。。Thanks@DmitryKvochkinObjectOutputStream处理键入。您只需要在接收端执行instanceof。如果接收端不知道是否需要对象或基元类型,请始终发送并期望对象。@DmitryKvochkin简单地说,如果您通过ObjectOutputStrema发送对象,则通过ObjectInputStream读取它。这在至少两个best定义下是正确的。但是我的客户怎么知道他收到的是什么类型的东西呢?因为我的服务器可以发送日历类型、数据或其他信息…我需要一个系统,以便客户端能够识别接收对象的类型。。。Thanks@DmitryKvochkinObjectOutputStream处理键入。您只需要在接收端执行instanceof。如果接收端不知道是否需要对象或基元类型,请始终发送并期望对象。@DmitryKvochkin简单地说,如果您通过ObjectOutputStrema发送对象,则通过ObjectInputStream读取它。
            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)