从插座读取和写入

时间:2010-01-09 16:52:20

标签: java multithreading client-server

我们正在为每个客户端服务器构建一个异步线程,并偶然发现问题。我们希望线程始终准备好从套接字读取或写入\。我们目前使用socket的读取方法阻塞,因此我们不能发出任何写请求。

  • 有没有办法打断读操作?
  • 也许最好让主服务器线程负责写入套接字?

如果是这样,它是否仍符合每个客户端设计模式的线程?

3 个答案:

答案 0 :(得分:2)

使用异步(非阻塞)套接字IO。或者您也可以使用单独的线程进行写作。

答案 1 :(得分:2)

确保套接字是非阻塞的(我认为是FIONBIO)。并使用select()确定何时可以读取数据。

答案 2 :(得分:1)

您应该使用单独的线程,一个用于读取,一个用于写入,并使用某种同步方法(例如,用互斥锁保护的共享缓冲区)在两者之间进行通信。此外,select调用可用于查看套接字上是否有任何待处理的数据。

<强>更新

我最初想的是可以从C调用的select()函数。哦。

我在Java API中最接近的是Socket.getInputStream(),它为您提供了一个流,可以对其进行测试,以确定是否可以从底层套接字读取字节。