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连续发送出现接收不到的异常问题解决方法的更多相关文章

  1. 基于VB中WINSOCK控件的网上象棋系统的实现

    本文发表在<微型机与应用>杂志2001年第3期. 基于VB中WINSOCK控件的网上象棋系统的实现 马根峰1   ,  孙艳2  , 王平1 (1.重庆邮电学院自动化学院,重庆,40006 ...

  2. Java中FTPClient上传中文目录、中文文件名乱码问题解决方法【好用】

    转: Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 问题描述: 使用org.apache.commons.net.ftp.FTPClient创建中文目录.上传中文文件名时,目录 ...

  3. DELPHI中自定义消息的发送和接收

    DELPHI中的消息处理机制 Delphi是Borland公司提供的一种全新的WINDOWS编程开发工具.由于它采用了具有弹性的和可重用的面向对象Pascal(object-orientedpasca ...

  4. 8.0后广播在AndroidManifest.xml中注册后发送intent接收不到广播

    8.0后广播在AndroidManifest.xml中注册后发送intent是接收不到广播了,看了一下原因,好像是8.0为了管理系统和节约电量特别针对广播和服务发送intent的方式启动做出的改变,也 ...

  5. VB中WinSock控件的属性、方法、事件及应用

    一.WinSock简介       Socket(套接字)最初是由加利福尼亚大学Berkeley(伯克利)分校为UNIX操作系统开发的网络通信接口,随着UNIX的广泛使用,Socket成为当前最流行的 ...

  6. java中DatagramSocket连续发送多个数据报包时产生丢包现象解决方案

    try { //向指定的ip和端口发送数据~! //先说明一下数据是谁发送过来的! byte[] ip = InetAddress.getLocalHost().getHostAddress().ge ...

  7. jquery.easyui.tabs 中的首个tabs被最后tabs覆盖的问题解决方法

    这是由于tabs对href重载的的问题导致,因此我们需要将href更改为其它自定义的属性即可避免此问题的发生. 解决方法如下: 第一步页面端: 循环体开始 <li> <div> ...

  8. CentOS 中使用yum出现的“UnicodeDecodeError: &#39;ascii&#39; codec”问题解决方法

    问题 新装了CentOS 6.5系统,打算使用yum安装程序是出现了例如以下错误: Loading mirror speeds from cached hostfile Traceback (most ...

  9. electron中JS报错:require is not defined的问题解决方法

    Electron已经发布了6.0正式版,升级后发现原来能运行的代码报错提示require is not defined 解决办法: 修改创建BrowserWindow部分的相关代码,设置属性webPr ...

随机推荐

  1. 使用vlc打开usb摄像头

    打开vlc播放器 可以打开网络串流的方式打开摄像头,但只支持第一个摄像头 这一串地址拼凑方法看下面,下面可以选择摄像头 为什么只支持第一个摄像头可以参考下一篇使用Vlc.DotNet打开摄像头并截图 ...

  2. django - 总结 - 用户认证组件

    用户认证组件 from django.contrib import auth 从auth_user表中获取对象,没有返回None,其中密码为密文,使用了加密算法 user = auth.authent ...

  3. Node.js实战项目学习系列(5) node基础模块 path

    前言 前面已经学习了很多跟Node相关的知识,譬如开发环境.CommonJs,那么从现在开始要正式学习node的基本模块了,开始node编程之旅了. path path 模块提供用于处理文件路径和目录 ...

  4. 弄懂promise

    ECMAscript 6 原生提供了 Promise 对象. Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息 有了 Promise 对象,就可以将异步操作以同步操作的流程表达出来 ...

  5. 全卷积网络 FCN 详解

    背景 CNN能够对图片进行分类,可是怎么样才能识别图片中特定部分的物体,在2015年之前还是一个世界难题.神经网络大神Jonathan Long发表了<Fully Convolutional N ...

  6. error: no matching function for call to 'std::exception:exception(const char[16])'

    环境:codeblocks 语言:C++ 在执行:throw new exception("queue is empty.");时 遇到问题:error: no matching ...

  7. ceph简单用户管理

    列出所有用户 ceph auth list 获取指定用户 ceph auth get client.admin 新增用户并输出密钥环 ceph auth get-or-create client.ge ...

  8. 解决只读时ios下input光标问题

    应用场景:在ios手机下对只读的input设置readonly=readonly属性还是会出现光标 解决方法: //解决ios日期光标问题 $("#Stime ,#provinceCity& ...

  9. 【Hibernate】Unable to locate appropriate constructor on class原因分析

    通常我们喜欢将hql查询结果封装到POJO对象syntax:select new POJO(id,name) from POJO ; 这种封装需要POJO类提供对应构造器,POJO(id,name)构 ...

  10. 【原创】大叔问题定位分享(24)hbase standalone方式启动报错

    hbase 2.0.2 hbase standalone方式启动报错: 2019-01-17 15:49:08,730 ERROR [Thread-24] master.HMaster: Failed ...