繁体   English   中英

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

[英]can two threads use the same socket at the same time, and are there possible problems with this?

两个线程可以同时使用同一套接字吗?

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

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

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

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

这样就有可能使一个线程使用套接字并侦听任何消息,而使另一个线程发送消息。 因此,如果同时从服务器接收到一条消息,则正在发送一条消息。

很明显,仅使用一个线程将阻塞,并且需要两个线程,但是使用同一套接字是否有可能出现此问题?

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

对于多个读者或作家来说,这个问题是显而易见的。 您读或写的内容必须有意义,因此套接字上的操作需要进行协调。 经常使用锁

顺便说一句,除非您喜欢混淆,否则请不要打开流。 如果要让DataOutputStream包装BufferedOutputStream,则仅将DOS用于所有内容。

您可以使用一个线程将数据发送到服务器,然后让另一个线程等待并侦听响应,并在收到响应时做一些事情。

如果多个线程使用同一套接字发送某些数据,则很有可能发生数据交织。

您可以使用单个套接字通过线程锁(例如,Android中的锁和Linux中的互斥锁)使用多个线程发送数据。

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM