VB6处理多个连接(多线程)

时间:2013-05-22 19:06:33

标签: multithreading sockets vb6

我想知道同时处理多个连接的最佳稳定方式是什么?

我正在使用vb6并且目前正在使用winsock api没有Winsock控件。我之前尝试过,它也不是多线程的。

目前,只有一个线程在线程忙于发送数据时效率不高,另一个连接器被延迟。直到线程自由。

我正在使用WSAAsyncSelect非阻塞套接字。

因为VB6在多线程中不稳定。我在考虑使用ASM DLL,然后从vb6调用它来处理连接。但最好的方法是什么?为每个连接创建一个线程,然后在recv后终止线程?或保持连接一直打开,直到另一部分关闭它?

因为运行客户端的服务器不是那么好的规范。因此,更多线程会消耗更多资源。

我对表现更好的方面知之甚少,所以请分享您的意见。

另外如何确保所有数据都是从非阻塞套接字上的send函数发送的?

应该循环发送并计算每次发送多少字节?或者只是打电话一次?我注意到,如果我发送一次无法处理的大数据,我在调用WSAAsyncSelect时指定的窗口将再次调用以处理网络事件,因此有更多数据要发送,但如何确保这是属于到这个部分发送?或者recv?

注意:最大连接数可以同时连接约100个。

以下是我通过网络规模(5 kb)发送图片时遇到的问题示例 有时它会被收到1次recv电话,而有时会被分成几部分

If Bytes = PicSize Then


        MsgBox "All data are sent 1 time"
        Else
            MsgBox "there is more data left"
            While Bytes <> PicSize
                bytesRecieved = recv(s, Buffer(Bytes), UBound(Buffer), 0)
                If bytesRecieved > 0 Then
                    Bytes = Bytes + bytesRecieved
                End If
                DoEvents
            Wend
        End If

recv的返回值总是WSAEWOULDBLOCK所以我进入了一个无限循环。 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

你问了不止一个问题,这很难回答。无论是直接使用异步winsock还是使用WinSock控件,重要的是要意识到当您认为“忙于发送数据”时,您所做的就是将数据传递到网络堆栈。这很快发生,您的代码继续。希望这些数据最终能够到达目的地。这部分不会很快发生,但您的代码已经开始处理下一个任务。