VB中Winsock连续发送出现接收不到的异常问题解决方法
VB里面用WINSOCK进行一对多连接的TCP连接时,经常需要群发消息给所有已连接的客户端.代码类似如下:
Option Explicit
Dim bytMsg() As Byte
Private Sub Command1_Click()
For i = To WSock.Count -
WSock(i).SendData bytMsg
Next i
End Sub
运行上面的代码发现,有时只有最后一个WINSOCK的客户端收到了消息,其他都没有收到.

PS:郁闷了好久,意外的发现当点击以下暂停,然后再点击运行,其他客户端又收到了消息...
网络上没有搜到太多的资料,所以下面给出三种解决方案,均测试通过:
第一种:根据网络找到的资料使用神奇的DOEVENTS,但是一般多连接的应用场景都比较复杂,可能会出现意料之外的后果.
Option Explicit
Dim bytMsg() As Byte
Private Sub Command1_Click()
For i = To WSock.Count -
If WSock(i) = sckConnected Then
WSock(i).SendData bytMsg
DoEvents
End If
Next i
End Sub
第二种:忐忑是最让人难受的,为了保证稳定性,我又在MSDN仔细的翻遍了WINSOCK所有的属性/方法/事件来看,当看到SocketHandle属性的时候眼前一亮
果断声明SOCKET的API > SEND,结果让人满意.
而且这回还可以发送一段byte()中的某一部分,
不像Winsock.SendData只能发送一整个byte(),片段只能先Redim byte(n),然后再CopyMemory进去,最后再发送...
Option Explicit
Dim bytMsg() As Byte
Private Declare Function send Lib "ws2_32.DLL" (ByVal socket As Long, _
Buf As Any, _
ByVal buflen As Long, _
ByVal Flags As Long) As Long
Private Sub Command1_Click()
For i = To WSock.Count -
If WSock(i) = sckConnected Then
send WSock(i).SocketHandle, bytMsg(), UBound(bytMsg) + ,
End If
Next i
End Sub
第三种:祈祷!哈哈~
-----------------------------------
哎,早我就该仔细看看winsock的属性,也不至于浪费这么多时间.
VB中Winsock连续发送出现接收不到的异常问题解决方法的更多相关文章
- 基于VB中WINSOCK控件的网上象棋系统的实现
本文发表在<微型机与应用>杂志2001年第3期. 基于VB中WINSOCK控件的网上象棋系统的实现 马根峰1 , 孙艳2 , 王平1 (1.重庆邮电学院自动化学院,重庆,40006 ...
- Java中FTPClient上传中文目录、中文文件名乱码问题解决方法【好用】
转: Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 问题描述: 使用org.apache.commons.net.ftp.FTPClient创建中文目录.上传中文文件名时,目录 ...
- DELPHI中自定义消息的发送和接收
DELPHI中的消息处理机制 Delphi是Borland公司提供的一种全新的WINDOWS编程开发工具.由于它采用了具有弹性的和可重用的面向对象Pascal(object-orientedpasca ...
- 8.0后广播在AndroidManifest.xml中注册后发送intent接收不到广播
8.0后广播在AndroidManifest.xml中注册后发送intent是接收不到广播了,看了一下原因,好像是8.0为了管理系统和节约电量特别针对广播和服务发送intent的方式启动做出的改变,也 ...
- VB中WinSock控件的属性、方法、事件及应用
一.WinSock简介 Socket(套接字)最初是由加利福尼亚大学Berkeley(伯克利)分校为UNIX操作系统开发的网络通信接口,随着UNIX的广泛使用,Socket成为当前最流行的 ...
- java中DatagramSocket连续发送多个数据报包时产生丢包现象解决方案
try { //向指定的ip和端口发送数据~! //先说明一下数据是谁发送过来的! byte[] ip = InetAddress.getLocalHost().getHostAddress().ge ...
- jquery.easyui.tabs 中的首个tabs被最后tabs覆盖的问题解决方法
这是由于tabs对href重载的的问题导致,因此我们需要将href更改为其它自定义的属性即可避免此问题的发生. 解决方法如下: 第一步页面端: 循环体开始 <li> <div> ...
- CentOS 中使用yum出现的“UnicodeDecodeError: 'ascii' codec”问题解决方法
问题 新装了CentOS 6.5系统,打算使用yum安装程序是出现了例如以下错误: Loading mirror speeds from cached hostfile Traceback (most ...
- electron中JS报错:require is not defined的问题解决方法
Electron已经发布了6.0正式版,升级后发现原来能运行的代码报错提示require is not defined 解决办法: 修改创建BrowserWindow部分的相关代码,设置属性webPr ...
随机推荐
- makefile :=和+=
经常有人分不清= .:=和+=的区别 这里我总结下做下详细的分析: 首先你得清楚makefile的运行环境,因为我是linux系统,那么我得运行环境是shell 在Linux的shell里,shel ...
- Pandas系列(十一)-文件IO操作
数据分析过程中经常需要进行读写操作,Pandas实现了很多 IO 操作的API,这里简单做了一个列举. 格式类型 数据描述 Reader Writer text CSV read_ csv to_cs ...
- DTO/DO等POJO对象的使用场景和 orika-mapper 框架的使用
对于项目而言, 我们一般会有DAO->Service->Controller分层设计, 这些层次体现了每层的作用, 而层次之间的数据传递对象设计很少被提及, 下面是一个相对完整的数据转换过 ...
- Lookup dict 并将属性更新于lookupdict object中
# encoding:utf-8class LookupDict(dict): """Dictionary lookup object.""" ...
- (二)校园信息通微信小程序从后台获取首页的数据笔记
在从后台获取数据之前,需要先搭建好本地服务器的环境. 确保Apache,MySql处于开启状态.下图为Apache,MySql处于开启时状态 然后进入后台管理平台进行字段和列表的定义 然后在后台添加数 ...
- JAVA进阶4
间歇性混吃等死,持续性踌躇满志系列-------------第4天 1.静态内部类求极值 class MaxMin{ public static class Result{ //表示最大值.最小值 p ...
- 412 6个题 BOM and DOM 定义计数器 网页跳转 网页前进后退
AM BOM-JavaScript: 提供一系列对象哟用于和浏览器窗口交互,对象主要有 window.document.location.navigator.screen 统称浏览器对象模型(Brow ...
- Python 入门基础14 --time、os、random、json、pickle 常用模块1
今日内容: 一.常用模块 2019.04.10 更新 1.time:时间 2.calendar:日历 3.datetime:可以运算的时间 4.sys:系统 5.os:操作系统 6.os.path:系 ...
- 3D Slicer中文教程(二)—软件功能界面介绍
1.界面介绍 2.菜单及工具栏介绍 (1)菜单 File-文件菜单 文件菜单包含用于加载MRML场景的选项,用于从互联网下载样本数据集或各种类型的各个数据集.此处还提供了保存场景和数据的选项. Edi ...
- 【原创】大叔经验分享(10)Could not transfer artifact org.apache.maven:maven. from/to central. Received fatal alert: protocol_version
maven编译工程报错 [ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.2:add-source (s ...