java套接字如何从两个不同的线程发送数据

标签 java multithreading sockets synchronization

我正在开发一个基于套接字的 clientType1 - Server - clientType2 程序。

clientType1仅向服务器发送数据(实际上是文件),服务器将数据中继到clientType2。

clientType1、Type2可以是多个。

问题是,如果两个以上 clientType1 尝试同时向一个 clientType2 发送文件,clientType2 将无法检索这两个文件中的任何一个。

我想我知道为什么会发生这种情况。这是因为服务器上的两个线程尝试同时写入同一个套接字。我怎样才能解决这个问题?

最佳答案

通过让客户端服务线程写入一个队列,另一个线程读取队列并将数据写入套接字(队列必须是线程安全的)。这是最简单的解决方案之一。

另一种方法是共享套接字并从 synchronized{} block 访问它(我假设您了解 Java 中的同步原语)。

关于java套接字如何从两个不同的线程发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28189040/

相关文章:

java - 为什么该算法执行IF语句时没有错误?

Android SQLite 查询、插入、更新、删除,总是需要在后台线程?

multithreading - 是否有最小化线程数的搜索算法?

c - 如果在 INADDR_ANY 上监听,确定客户端连接的实际接口(interface)?

java - 列出远程服务器目录中的文件名

java - 带有java配置的spring security AuthenticationFailureHandler

linux - 以 QT 方式使用 linux 套接字?

c - 破管错误

java - 支持 Cloud Bigtable 作为 Cloud Dataflow 中的接收器

python - python 中的键盘输入(通过 pynput)和线程