Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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.net.socket传输的其他数据吗?_Java_Sockets_Networking_Network Programming_Networkstream - Fatal编程技术网

您可以发送图像而不暂停通过同一java.net.socket传输的其他数据吗?

您可以发送图像而不暂停通过同一java.net.socket传输的其他数据吗?,java,sockets,networking,network-programming,networkstream,Java,Sockets,Networking,Network Programming,Networkstream,情况就是这样: 我正在从事一个项目,在这个项目中,我需要能够偶尔向服务器发送一个或多个图像,以及用文本表示的许多其他类型的数据。目前的做法是,发送一条消息,上面写着“大小为x的传入图像将用作y”(当然,它不是“公式化”的),然后我调用一个方法,通过DataInputStream读取下一个x字节。起初,我遇到一些延迟问题,把事情搞砸了,但我让服务器生成一个新线程来发送“传入映像”消息,然后等待一个标志,当客户端响应“我准备好接收映像”消息时设置该标志。它现在的工作方式是这样的,但是如果在传输图像时

情况就是这样:

我正在从事一个项目,在这个项目中,我需要能够偶尔向服务器发送一个或多个图像,以及用文本表示的许多其他类型的数据。目前的做法是,发送一条消息,上面写着“大小为x的传入图像将用作y”(当然,它不是“公式化”的),然后我调用一个方法,通过DataInputStream读取下一个x字节。起初,我遇到一些延迟问题,把事情搞砸了,但我让服务器生成一个新线程来发送“传入映像”消息,然后等待一个标志,当客户端响应“我准备好接收映像”消息时设置该标志。它现在的工作方式是这样的,但是如果在传输图像时发送了任何其他信息,例如聊天信息,则表示给BufferedReader的消息将被读取为原始字节,并用作图像的一部分。因此,当有图像正在发送时,我必须阻止所有传出数据(并将其添加到队列)。但这似乎是非常错误和恼人的,因为应用程序的用户在接收/上传大图像时将无法聊天

这就是我需要的: 因此,我需要设置一个独立的通道来使用原始数据。据我从修补中了解,我将不得不在新端口上设置一个新的套接字,这似乎是不必要的。解决这个问题的另一种方法是,以某种方式使用“this is text/raw data”(这是文本/原始数据)位标记每个数据包,但我不知道如何使用java实现这一点?当您向流中写入某些内容(每个包含该信息的数据包都将包含这些内容)时,是否可以向数据包头添加信息,然后读取另一端的数据包数据并相应地执行操作

正如您所看到的,我没有太多的网络经验,也没有很长时间使用Java。这也是我在这里的第一篇文章,所以要友善。如果有什么不清楚的地方,请询问,我会详细说明。欢迎提出任何意见!(可能有一种标准方法可以做到这一点?)


非常感谢

TCP协议本身没有任何东西可以帮助您。 您可以打开一个新的套接字连接(可以连接到同一个服务器端口),或者将图像分成更小的块,并将这些块包装在信封中,说明它是什么类型的消息:图像或聊天。然后在接收端从这些块重建图像。但这将浪费带宽,并增加其自身的复杂性(例如,您在该图像中制作的块有多大?。

我将使用单独的二进制数据连接。

TCP协议本身没有任何东西可以帮助您。 您可以打开一个新的套接字连接(可以连接到同一个服务器端口),或者将图像分成更小的块,并将这些块包装在信封中,说明它是什么类型的消息:图像或聊天。然后在接收端从这些块重建图像。但这将浪费带宽,并增加其自身的复杂性(例如,您在该图像中制作的块有多大?。

我会选择单独的二进制数据连接。

Java应该对HTTP协议有一个标准支持-使用HTTP进行图片传输,因为您可以设置在标头中传输的数据类型。基本上,您可以让客户机/服务器体系结构为每个新的数据传输(无论是文本还是图像)建立一个单独的请求,这样您就可以在一个简单的循环中进行处理


这可能会对您有所帮助:

Java应该对HTTP协议有一个标准支持-使用HTTP进行图片传输,因为您可以设置在标头中传输的数据类型。基本上,您可以让客户机/服务器体系结构为每个新的数据传输(无论是文本还是图像)建立一个单独的请求,这样您就可以在一个简单的循环中进行处理


这可能会对您有所帮助:

好的,非常感谢:)我会关注一下这个问题,可能会进行单独的数据连接?查看如何在同一端口上设置多个连接,只需打开与第一个连接相同的第二个连接。服务器端可以接受一个循环中的服务器套接字。是的,我让它工作:)再次感谢。我仍然需要一些时间来完成所有的工作,但我可以看到我现在要怎么做。好的,非常感谢:)我会关注这个问题一段时间,可能会进行单独的数据连接?查看如何在同一端口上设置多个连接,只需打开与第一个连接相同的第二个连接。服务器端可以接受一个循环中的服务器套接字。是的,我让它工作:)再次感谢。我仍然需要一些时间来完成这一切,但我知道我现在要怎么做。谢谢,我会调查的。您是否建议我将整个体系结构从TCP更改为HTTP协议?据我所知,这将使它也成为一个web小程序成为可能?您不会从TCP更改为HTTP,因为HTTP运行在TCP之上(它是一个应用程序级协议)。这与你的应用程序是一个“web小程序”无关,你可以让一个桌面应用程序充当http客户端——其中一个实际上就是你的浏览器。而网络小程序几乎是一个古老的过去。我不知道现在有谁在认真地研究web小程序了。是的,我知道它是如何工作的:)但是从程序员的角度(我)来说,我必须更改代码以通过HTTP发送,即使从技术上讲它仍然是TCP。我也知道它仍然可以作为一个桌面应用程序使用,但我认为拥有一个applet版本的客户端会很好,但因为我使用的是套接字,所以不可能。我还没有真正研究过它,但听起来好像你建议的是让小程序与服务器通信的相同方式?不管怎样,这不是我主要关心的问题,如果有选择的话,我会很高兴的。非常感谢。HTTP是一个不错的主意,但必须继续努力