2013-02-10 65 views
1

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

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

所以我真的希望有人会阅读这些内容并向我解释我不理解的是什么,或者我做错了什么。

+0

您可以发布您开始收听的代码,以及您打开连接的代码以及您接收和发送数据的代码吗? – Hrqls 2013-02-11 08:04:54

回答

-3

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

+1

VB6 Winsock控件* only *创建异步套接字,并且在VB6中没有创建无用的工作线程的方便方法。 – Bob77 2013-02-10 17:06:29

+0

使用原生C/C++来解决这个问题;) – Matthias 2013-02-10 17:07:31

2

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

一旦你做完了(并且只有这样)才真正值得谈论你描述的问题。至少它消除了大量已知问题,然后可能值得讨论你的代码。

+0

感谢您的回复,我不认为我会很快得到答案。我同意在提出任何问题之前尝试SP6并不会有什么坏处。但是,这正是我想知道的。这个问题是我看到一个错误还是Winsock应该如何表现?我将很快安装SP6,但我不明白为什么人们不只是说这种行为是一个错误还是它是Winsock控件的标准行为?只有在前者安装SP6的情况下才能解决问题。我将安装SP6,但如果有人知道这种行为是否正常,请告诉我。 – user2059182 2013-02-10 21:26:15

+1

他们不能说因为没有办法知道。Winsock控件是初学者经常挣扎的东西,并且可以将自己束缚在节点上。一旦你安装了SP6,你所描述的理想行为应该很容易完成,但是你仍然必须正确编写你的程序 - 没有服务包可以为你做这件事。 – Bob77 2013-02-11 13:36:17

相关问题