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. kafka 基础知识梳理及集群环境部署记录

    一.kafka基础介绍 Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特 ...

  2. 1.5分布式通讯框架-RMI

    分布式通信框架-RMI讲解 什么是RPC Remote procedure call protocal RPC协议其实是一个规范.常用PRC框架:Dubbo.Thrif.RMI.Webservice. ...

  3. dubbo和dubboX与微服务架构(dubbo一)

    一.传统三层架构模式的缺陷 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)web.业务逻辑层(Bu ...

  4. 如何解决failed to push some refs to git

    $ git push -u origin master To git@github.com:yangchao0718/cocos2d.git ! [rejected]        master -& ...

  5. Javaweb学习笔记——(二十四)——————图书商城项目

    图书商城          环境搭建         1.导入原型             *用户模块             *分类模块             *图书模块              ...

  6. C#控件数组批量生成控件

    在编写C#窗体应用程序的时候,有时候需要生成好多个功能相似的同一种控件(比如数字键盘按键.单选框等),这时候使用窗体编辑器,费时费力,不便于修改.因此可以采用批量生成控件的形式. 以批量生成按钮为例 ...

  7. $Django 路飞之显示视频,Redis存购物车数据,优惠卷生成表,优惠卷的一个领取表。(知识小回顾)

    知识小回顾之json序列化问题 精髓:支持python的几种数据类型(注意不是对象,不能放对象),其次是tuple变list. ensure_ascii:默认值True,如果dict内含有non-AS ...

  8. javascript事件委托的原理与实现

    事件委托 事件流 捕获:查找目标元素: 目标:执行目标的事件: 冒泡:依次执行祖先元素的事件. onmouseenter和onmouseleave不支持冒泡: onmouseover和onmouseo ...

  9. 02-Django基础知识

    一.内容回顾 1.web应用程序 2.HTTP协议 a.http协议特性 b.http请求格式 c.http响应格式 3.wsgiref模块 4.Django下载与简单应用 a.Django简介(MT ...

  10. select2 下拉搜索控件

    1.添加相应的script链接 jquery: <script type="text/javascript" src="http://cdn.bootcss.com ...