Java 仅用于一个连接的两个插座

Java 仅用于一个连接的两个插座,java,sockets,instant-messaging,Java,Sockets,Instant Messaging,我正在用Java制作一个即时通讯器,我想添加发送图像和文本的功能。首先想到的是制作新的套接字和输入输出流。首先,这会起作用吗?这是一种良好的做法吗。其次,如果这不起作用,那么消息的接收端如何判断它接收的是图像还是字符串?请记住,您不是在传输字符串或图像,而是在交换消息。消息应具有与其关联的内容或消息类型。请记住,您不是在传输字符串或图像,而是在交换消息。消息应具有与其关联的内容或消息类型。输出流包含字节,您必须将其内置到消息中。读者知道您发送的是哪种类型的数据,因为发送者必须说明它发送的是哪种类

我正在用Java制作一个即时通讯器,我想添加发送图像和文本的功能。首先想到的是制作新的套接字和输入输出流。首先,这会起作用吗?这是一种良好的做法吗。其次,如果这不起作用,那么消息的接收端如何判断它接收的是图像还是字符串?

请记住,您不是在传输字符串或图像,而是在交换消息。消息应具有与其关联的内容或消息类型。

请记住,您不是在传输字符串或图像,而是在交换消息。消息应具有与其关联的内容或消息类型。

输出流包含字节,您必须将其内置到消息中。读者知道您发送的是哪种类型的数据,因为发送者必须说明它发送的是哪种类型的消息


e、 g.如果你把say“image”写成一个字符串,你可以假设它后面是一个图像。

输出流包含字节,你必须将其构建到消息中。读者知道您发送的是哪种类型的数据,因为发送者必须说明它发送的是哪种类型的消息


e、 g.如果你把say“image”写成一个字符串,你可以假设它后面的是一个图像。

它可以工作,但是你有两个连接,这可能不是最好的主意。您需要在数据格式中引入一些元数据,以指示什么是字符串,什么是图像(以及什么是您尚未想到的将来的东西)。所有的东西都在同一条管子里。两个插座不能给你任何东西。请记住,套接字是双向管道。因此,目前我有一种发送代码(也称为int)和消息(称为字符串)的方法。我已经尝试过处理这个问题,所以我发送一个代码告诉接收端,图像通过,然后将消息更改为一个对象,但它只想发送图像的文件路径。此外,我不知道如何判断对象是字符串还是文件。这会起作用,但会有两个连接,这可能不是最好的主意。您需要在数据格式中引入一些元数据,以指示什么是字符串,什么是图像(以及什么是您尚未想到的将来的东西)。所有的东西都在同一条管子里。两个插座不能给你任何东西。请记住,套接字是双向管道。因此,目前我有一种发送代码(也称为int)和消息(称为字符串)的方法。我已经尝试过处理这个问题,所以我发送一个代码告诉接收端,图像通过,然后将消息更改为一个对象,但它只想发送图像的文件路径。还有,我不知道如何分辨一个对象是字符串还是文件。那么我该如何分辨它在java中是哪种类型的对象呢?@dsiegler19它是你写它时说的类型。那么我该如何分辨它在java中是哪种类型的对象呢?@dsiegler19它是你写它时说的类型。谢谢,我知道了,由于某种原因,完全弄乱了代码中的某个.substring,导致它大量崩溃。我使用了instanceof关键字,听起来像是在用Java序列化来回发送消息。虽然这会起作用,并且对于测试项目来说也很好,但是如果您希望变得健壮,那么您确实应该定义一种可以控制的单独的序列化格式,例如JSON或XML消息。这将有助于将来的扩展(请记住在消息中包含消息类型修订号)谢谢,我得到了它,因为出于某种原因,我完全弄乱了代码中的某个.substring,导致它大量崩溃。我使用了instanceof关键字,听起来像是在用Java序列化来回发送消息。虽然这会起作用,并且对于测试项目来说也很好,但是如果您希望变得健壮,那么您确实应该定义一种可以控制的单独的序列化格式,例如JSON或XML消息。这将有助于将来的扩展(记住在消息中包含消息类型修订号)