gpt4 book ai didi

java - 两个线程可以同时使用同一个套接字吗,这可能有问题吗?

转载 作者:搜寻专家 更新时间:2023-11-01 08:55:57 24 4
gpt4 key购买 nike

两个线程可以同时使用同一个socket吗?

例如,首先我打开一个表示 Android 客户端和 Windows 7 服务器之间连接的套接字。我想通过使用 DataOutputStream 发送一个文件大小的整数,然后我将使用 BufferedOutputStream 发送二进制文件,例如 pdf

服务器会获取客户端发送的大小,然后检查接收到的文件大小是否正确。它将发送整数、文件大小数字与接收到的文件的实际大小进行比较。如果有任何差异,服务器知道文件不完整,然后它会向客户端发送一条消息,请求再次发送文件。

我有一个应用程序,其中大约有 5% 的时间接收到的文件不完整。它到达时比实际尺寸小。解决此问题的唯一方法是,如果文件不完整,请重新发送文件

如果我发送文件,则需要打开一个端口并等待从服务器接收返回的消息,告诉客户端文件是否已完整接收或必须重新发送。

那么是否可以让一个线程使用套接字并监听任何消息,而在另一个线程上发送消息。这样一来,如果正在发送一条消息的同时从服务器接收回消息。

很明显,只使用一个线程会阻塞,需要两个线程,但是使用同一个套接字会不会有问题?

最佳答案

拥有专用的读取器线程并允许其他线程写入同一套接字是一种非常常见的模式。

多个读者或作者的问题相当明显。您读取或写入的内容需要有意义,因此需要协调套接字上的操作。经常使用锁

顺便说一句,除非你喜欢混淆,否则不要打开流。如果你想要一个 DataOutputStream 来包装一个 BufferedOutputStream 然后只使用 DOS 做所有事情。

关于java - 两个线程可以同时使用同一个套接字吗,这可能有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18910022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com