VB6.0的winsock控件用UDP局域网广播数据,当数据很大时接收方报10040--数据包太大,请问怎么处理。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB6.0的winsock控件用UDP局域网广播数据,当数据很大时接收方报10040--数据包太大,请问怎么处理。相关的知识,希望对你有一定的参考价值。

虽然很久没用这控件了,不过原理还是懂的,给你点思路吧
解决你的问题,大概有几个方法:
一.控制发送速度,简单但是效率有点低
二.技术方加大数据缓冲,优先接收,读了就放内存里,接收完或是空闲时再处理,这在处理过程复杂时比较有效
三.出错的数据丢掉----没错,就是不要了!
既然你选择了UDP,就无法避免丢包的事情发生,肯定要有相关的容错处理.网络可以"自动"丢包,我们写的程序为什么不能"人为"丢包呢?
其实,多数情况下,要根据所处理数据的特点 当前网络特点 机器现状来制定策略,综合上述办法,甚至创造更新的办法

以上,希望对你有帮助,还有问题欢迎探讨
参考技术A on error goto err
正常接受代码.....
exit sub
err:
if err.number=10040 then msgbox "数据包太大无法接受!",vbinformation,"":err.clear追问

有没有办法接收到大量的全部数据

追答

只能把数据拆开分批发送咯

VB6 中的默认 WinSock 协议

【中文标题】VB6 中的默认 WinSock 协议【英文标题】:Default WinSock Protocol in VB6 【发布时间】:2011-12-21 20:06:53 【问题描述】:

我有一个基于 C# 的服务器和一些尝试连接的 VB6 客户端。问题是客户端似乎只是随机“丢失”消息。 myWinSock.Protocol 永远不会在任何地方设置,因此无论默认值是什么,客户端的 WinSock 都会是什么。如果默认是 UDP,那将回答我的问题并解释数据包的丢失。

VB6 WinWock 的默认协议是UDP 还是TCP

【问题讨论】:

我敢肯定,如果一方尝试使用 TCP 而另一方尝试使用 UDP,它根本不会工作。 尝试在两端使用wireshark,看看服务器端发送了哪些数据,客户端接收了哪些数据。 @Shane Wealti,是的,我想了很多,但我想尽可能消除所有潜在的问题。 【参考方案1】:

在 VB6 中,控件的属性是在设计器中设置的,并且没有生成的属性设置代码可以支持在属性表上所做的选择。

因此,您无法仅通过查看 IDE 显示的 VB6 代码来判断这一点。

您可以做的是单击 winsock 控件图标,然后查看网格中显示的属性。

如果您想以这种方式分析一堆文件,您可以查看*.frm 文件的原始内容,在开头您将看到为设计器网格中的控件设置了哪些属性。

也就是说,winsock 的默认协议是 TCP。但是您永远无法知道是否保留了默认设置。

【讨论】:

哇。非常感谢,我会试试这个。

以上是关于VB6.0的winsock控件用UDP局域网广播数据,当数据很大时接收方报10040--数据包太大,请问怎么处理。的主要内容,如果未能解决你的问题,请参考以下文章

winsock控件的TCP和UDP协议的判断问题

请问:在VB6.0中使用winsock控件,作为服务器要设置本地IP地址吗?

如何用UDP 实现服务器广播发送,并接收客户端点对点回复,用winsock实现,写出关键代码,谢谢~

VB如何使用Winsock进行1对多通信

VB6 应用程序通过 winsock 发送 UDP 广播消息 - 仅每秒发送一次消息

105.UDP通信实现广播