首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理多个连接的VB6 (多线程)

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

Stack Overflow用户
提问于 2013-05-23 03:06:33
回答 1查看 1.4K关注 0票数 0

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

我使用的是vb6,目前使用的是winsock api的no Winsock控件。我以前试过,它也不是多线程的。

目前,它只是一个线程,当线程忙于发送数据时,效率很低,另一个连接器被延迟。直到线程空闲。

我使用的是WSAAsyncSelect非阻塞套接字。

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

因为运行客户端的服务器并没有那么好的规格。所以线程越多,消耗的资源就越多。

我没有太多关于性能更好的知识,所以请分享你的意见。

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

是否应该循环发送并计算每次发送的字节数?还是只打一次电话?我注意到,如果我发送的大数据不能在1次处理,我在call to WSAAsyncSelect指定的处理网络事件的窗口再次被调用,因此有更多的数据需要发送,但是如何确定这属于这个部分发送?还是recv?

注意:最多可以同时连接100个连接。

这是一个我在网络大小(5kb)上发送图片时遇到的问题的例子,有时它是通过一次recv调用接收的,而有时它被分成几个部分

代码语言:javascript
复制
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,所以我进入了一个无限循环。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-24 20:14:23

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16699743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档