【问题标题】:Winsock Array with data arriving simultaneously stops sending data to clients数据同时到达的 Winsock 数组停止向客户端发送数据
【发布时间】:2013-01-25 20:19:28
【问题描述】:

我已经在网上搜索了好几天,但找不到任何与 VB6 Winsock 有同样问题的人。所以这是我的问题,我有一个服务器,阵列中有两个winsocks。然后我有两个客户端,每个客户端都有一个winsock控件。现在我设置的是服务器首先向客户端 A 发送数据。然后客户端 A 接收该数据并将自己的数据发送回服务器。然后服务器向客户端 B 发送数据,客户端 B 收到数据后,将自己的数据发送回服务器。因此数据从客户端发送到服务器,然后从服务器发送到另一个客户端,然后返回到服务器,然后再发送到另一个客户端。我这样做是因为当我尝试按照我真正想要的方式进行操作时,我遇到了问题。所以我必须以这种方式进行设置,以确保任何时候只有一个客户端向服务器发送数据。这个过程完美无缺,但是我希望它以不同的方式工作,因为正如您所想象的那样,客户端越多,每个客户端和服务器之间的数据传输延迟就越长。

所以我真正想做但我无法工作的事情是让客户端随时向服务器发送和接收数据。也就是说,客户端 A 向服务器发送数据,然后服务器将数据发回,而客户端 B 也在做同样的事情。当我这样做时,即使我在服务器上有一个 winsock 数组,我也会遇到问题。当客户端 A 第一次连接时,它开始向服务器发送和接收数据。但是一旦客户端 B 连接到服务器,客户端 A 和服务器之间的所有通信都停止了,只有客户端 B 向服务器发送和接收数据。现在我已经做了一些测试,客户端 A 一直保持连接到服务器。但是由于某种原因,如果两个客户端同时向服务器发送数据,即使每个 winsock 位于不同的端口上,也只会触发一个数据到达事件。我还没有安装 VB6 SP6,因为我不确定这是否能解决问题。

所以我真的希望有人能读到这篇文章并向我解释我不理解什么或者我做错了什么。

【问题讨论】:

  • 能否贴出你开始监听的代码,以及你打开连接的代码,以及你接收和发送数据的代码?

标签: vb6 client-server winsock


【解决方案1】:

如果您搜索有关 Winsock 控件的 Microsoft 知识库文章,您会发现历史悠久的缺陷和错误修复。在尝试使用 VB6 之前,绝对没有理由安装 SP6,因为随着时间的推移,大量问题得到了解决。

一旦你做到了(而且只有那时),就真的值得谈论你描述的那种问题了。至少它消除了大量已知问题,然后可能值得讨论您的代码。

【讨论】:

  • 感谢您的回复,我没想到会这么快得到答复。我同意在提出任何问题之前尝试 SP6 并没有什么坏处。然而,这正是我想知道的。这个问题是我看到了一个错误还是 Winsock 应该如何表现?我将很快安装 SP6,但我不明白为什么人们不只是说这种行为是错误还是 Winsock 控件的标准行为?只有是前者,安装SP6才能解决问题。我将安装 SP6,但如果有人知道这种行为是否正常,请告诉我。
  • 他们不能说,因为没有办法知道。 Winsock 控制是初学者经常遇到的问题,并且可以让自己陷入困境。一旦安装了 SP6,您描述的所需行为应该很容易实现,但您仍然必须正确编写程序 - 没有任何服务包可以为您做到这一点。
【解决方案2】:

您是否使用非阻塞套接字?我想你应该。 您可能应该为每个传入连接创建一个线程。 所以主循环应该不阻塞并为每个传入的连接创建一个线程,接收数据并发送答案。

【讨论】:

  • VB6 Winsock控件创建异步套接字,反正在VB6中也没有创建无偿工作线程的便捷方法。
猜你喜欢
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
相关资源
最近更新 更多