【问题标题】:How ServerSocket deal with multiple connection from clients at the same time?ServerSocket 如何同时处理来自客户端的多个连接?
【发布时间】:2020-08-03 19:00:00
【问题描述】:

好的,让我们来澄清问题......

我正在学习Java中的Sockets,据我所知,与这个主题相关的是:

  • 要使多个客户端只连接到服务器中的一个地址(端口),那么需要将每个客户端连接分配给另一个线程

基于此,我对某些事情感到困惑,直到现在在这里或 Google 都找不到任何可接受的答案。

  1. 如果 Socket 是同步的,如果 2 个客户端尝试同时连接会发生什么?服务器如何决定谁先连接?

  2. 服务器如何处理来自一个客户端的多条消息?我的意思是,它是否按顺序处理?下单退货?

  3. 上述相同的问题,但来自多个客户端的多条消息?

  4. 如果消息没有排序,如何实现? (在java中)

很抱歉所有这些问题,但对我来说,它们都是相关的......

编辑: 正如评论所说,我误解了同步的概念,所以改变了那部分。 我们在这里要求大家学习不要被其他人评判,所以在给 -1 票之前考虑一下。

【问题讨论】:

  • 1.它在哪里说“默认情况下套接字是同步的”? 2. 计算中没有“同时”这回事。一个事件在另一个事件之前处理。
  • 好吧,正如我所说,这就是我所理解的,但在您发表评论后,我再次谷歌搜索,您是对的,我想念同步过程。

标签: java sockets serversocket


【解决方案1】:

如果 2 个客户端尝试同时连接会发生什么

2 个客户端不可能同时连接:网络基础设施保证了这一点。同时发生的两个请求称为collision (wikipedia),网络以某种方式处理它:它可以通过detection 或通过avoidance

服务器如何处理来自一个客户端的多条消息?我的意思是,它是否按顺序处理?

是的。 Socket 类 API 使用 TCP/IP 协议,该协议在每个段中包含序列号,并对段重新排序,以便按照发送顺序处理它们,这可能与接收顺序不同。

如果您改用DatagramSocket,那将使用UDP,这不保证订购。

上述相同的问题,但来自多个客户端的多条消息?

无法保证从多个来源发送的段的相对顺序。

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    相关资源
    最近更新 更多