【问题标题】:TCP socket programing and multithreading in javajava中的TCP套接字编程和多线程
【发布时间】:2015-12-14 16:28:53
【问题描述】:

我想在 Java 中使用 TCP 套接字在三台计算机之间发送和接收数据

  • 第一台计算机从键盘获取数据并将其发送到 第二台计算机。
  • 第二台计算机从 首先并将其发送到第三台计算机。

我的问题是:我可以不使用多线程在第二台计算机(从第一台计算机接收数据并同时发送到第三台计算机)中实现TCP套接字程序吗?

【问题讨论】:

  • java 中默认/最简单的套接字支持使用“阻塞”IO API,这需要多个线程才能正确使用。 “非阻塞”API 可以单线程完成,但使用起来要复杂得多

标签: java multithreading tcpsocket


【解决方案1】:

是的,你可以。 (但它可能很愚蠢)

只需绑定一个端口并在服务器 2 上监听它。 服务器 1 连接到服务器 2 并发送数据。 服务器 2 读取数据,连接到服务器 3 并向他发送数据,在同一个线程上。

如果没有多线程,您既可以从服务器 1 读取输入,也可以将数据发送到服务器 3。此外,您只能一个接一个地处理来自服务器 1 的数据。程序运行缓慢(不会像多线程那样快)。

【讨论】:

  • 由于数据是从键盘获取的,所以你的单线程解决方案的速度应该足够了。
【解决方案2】:

你应该让机器 2 作为服务器,它会监听一些固定的 ip:port。将机器 1 和 3 作为客户端,它们将在固定 ip:port 上连接到机器 2。

关于多线程,您可以使用 poll/select 减少服务器线程。请参考链接Is there epoll equivalent in Java?,它更好地解释了poll/select。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 2016-07-23
    • 2012-12-08
    • 1970-01-01
    相关资源
    最近更新 更多