Vb6 数据同时到达的Winsock阵列停止向客户端发送数据

Vb6 数据同时到达的Winsock阵列停止向客户端发送数据,vb6,client-server,winsock,Vb6,Client Server,Winsock,我已经在线搜索了好几天了,我找不到任何人有与VB6 Winsock相同的问题。这是我的问题,我有一个服务器,在一个数组中有两个Winsock。然后我有两个客户端,每个客户端有一个winsock控件。现在我已经设置好了,服务器首先向客户机A发送数据,然后客户机A接收数据并将自己的数据发送回服务器。然后服务器将数据发送到客户端B,一旦客户端B接收到数据,它将自己的数据发送回服务器。因此,数据从一个客户端发送到服务器,然后从服务器发送到另一个客户端,然后返回到服务器,然后再发送到另一个客户端。我这样做

我已经在线搜索了好几天了,我找不到任何人有与VB6 Winsock相同的问题。这是我的问题,我有一个服务器,在一个数组中有两个Winsock。然后我有两个客户端,每个客户端有一个winsock控件。现在我已经设置好了,服务器首先向客户机A发送数据,然后客户机A接收数据并将自己的数据发送回服务器。然后服务器将数据发送到客户端B,一旦客户端B接收到数据,它将自己的数据发送回服务器。因此,数据从一个客户端发送到服务器,然后从服务器发送到另一个客户端,然后返回到服务器,然后再发送到另一个客户端。我这样做是因为当我试图以我真正想要的方式去做的时候,我遇到了问题。所以我必须这样设置它,以确保在任何时候只有一个客户端向服务器发送数据。这个过程工作得很好,但是我希望它以不同的方式工作,因为您可以想象,客户机越多,每个客户机和服务器之间的数据传输延迟就越长

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


因此,我真的希望有人能读到这篇文章,并向我解释我不理解的地方或我做错的地方。

您使用的是无阻塞套接字吗?我想你应该。 您可能应该为每个传入连接创建一个线程。
因此,主循环应执行无阻塞操作,并为每个传入连接创建一个线程,该线程接收数据并发送答案。

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


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

VB6 Winsock控件只创建异步套接字,而且在VB6中没有创建免费工作线程的方便方法。谢谢您的回答,我认为我不会这么快得到答案。我同意在提出任何问题之前尝试SP6不会有什么坏处。然而,这正是我想知道的。这个问题是我看到的bug还是Winsock的行为方式?我将很快安装SP6,但我不明白为什么人们不说这是一个bug还是Winsock控件的标准行为?如果是前者,安装SP6才能解决问题。我会安装SP6,但如果有人知道这种行为是否正常,请告诉我。他们不能说,因为没有办法知道。Winsock控件是初学者经常遇到的问题,它会让自己陷入困境。一旦安装了SP6,您所描述的期望行为应该很容易实现,但您仍然必须正确编写程序-没有任何service pack可以为您做到这一点。您可以发布开始侦听的代码、打开连接的代码以及接收和发送数据的代码吗?