【问题标题】:VB6 handling Multiple connections (Multi-Threading)VB6 处理多连接(多线程)
【发布时间】:2013-05-22 19:06:32
【问题描述】:

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

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

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

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

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

因为运行客户端的服务器没有那么好的规范。所以更多的线程会消耗更多的资源。

我对性能更好的方面了解不多,所以请分享您的意见。

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

应该循环发送并计算每次发送多少字节?还是只调用一次?我注意到如果我发送的大数据无法在 1 次处理,我在调用 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,所以我进入了一个无限循环。 有什么建议吗?

【问题讨论】:

  • MASM?汇编?另外:你的 VB6 家伙是应用程序还是 DLL?
  • 是的 MASM 汇编程序。我的 vb6 是应用程序 EXE 接收连接。不能让它多线程。我尝试了一切仍然有时会崩溃。不安全。
  • VB6 中的多线程意味着多次启动同一个应用程序;) 解决此类问题的 VB6 方法是为自己准备一个简洁的组件。例如 Chilkat Socket,它是异步工​​作的,所以即使是单个线程也应该能够处理很多连接。
  • 人们已经使用 Winsock 控件与一台用 VB6 编写的服务器同时完成了数千个 TCP 连接,尽管这样的服务器产生了微不足道的回声并且仅用于演示。服务器做一些实用但不太密集的处理数百不应该是一个问题。 Winsock控件是异步的,性能非常好,建议你先看看自己的程序结构。

标签: multithreading sockets vb6


【解决方案1】:

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

【讨论】:

  • 是的,你是对的。如果我问的太多,我很抱歉。谢谢你的解释。
  • 嗨,tcarvin。好吧,你是对的。我通过在 recv 回调函数中放置一个消息框来发现这一点,因此多次调用会产生多个 msgbox。这不像我认为会阻止执行。我现在在接收某些数据时遇到问题,总是被分成几部分,它只有 5 kb 的图片,有时完全接收,有时没有。所以我循环通过recv来获取所有数据。问题所有recv 返回的是WSAEWOULDBLOCK。知道如何解决这个问题吗?我正在使用非阻塞套接字。
  • 欢迎您。如果您认为此答案解决了您的问题,请在左侧“接受”它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-17
相关资源
最近更新 更多