1

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

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

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

4

2 回答 2

2

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

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

于 2013-02-10T17:04:22.543 回答
-3

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

于 2013-02-10T17:03:30.240 回答