-
VB Winsock 控件TCP与UDP连接实例
可能的用途
-
创建收集用户信息的客户端应用程序,并将收集的信息发送到某中央服务器。
-
创建一个服务器应用程序,作为多个用户的数据的汇入点。
- 创建“聊天”应用程序。
选择通讯协议
-
TCP 协议控件是基于连接的协议,可以将它同电话系统相比。在开始数据传输之前,用户必须先建立连接。
- UDP 协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。另外,单次传输的最大数据量取决于具体的网络。
-
在收发数据的时候,应用程序是否需要得到客户端或者服务器的确认信息?如果需要,使用 TCP 协议,在收发数据之前先建立明确的连接。
-
数据量是否特别大(例如图象与声音文件)?在连接建立之后,TCP 协议将维护连接并确保数据的完整性。不过,这种连接需要更多的计算资源,因而是比较“昂贵”的。
- 数据发送是间歇的,还是在一个会话内?例如,如果应用程序在某个任务完成的时候需要通知某个计算机,UDP 协议是更适宜的。UDP 协议适合发送少量的数据。
协议的设置
-
Winsock1.Protocol = sckTCPProtocol
确定计算机的名称
-
在计算机的“任务栏”上,单击“启动”。
-
在“设置”项中,单击“控制面板”。
-
双击“网络”图标。
-
单击“标识”选项卡。
- 在“计算机名称”框中可以找到计算机的名称。
TCP 连接初步
-
创建新的 Standard EXE 工程。
-
将缺省窗体的名称改为 frmServer。
-
将窗体的标题改为“TCP 服务器”。
-
在窗体中放入一个 Winsock 控件,并将它的名字改为 tcpServer。
-
在窗体上添加两个 TextBox 控件。将第一个命名为 txtSendData,第二个为 txtOutput。
- 为窗体添加如下的代码。
-
VBScript code复制代码
-
Private Sub Form_Load() '将 LocalPort 属性设置为一个整数。 '然后调用 Listen 方法。 tcpServer.LocalPort = 1001 tcpServer.Listen frmClient.Show '显示客户端的窗体。 End Sub Private Sub tcpServer_ConnectionRequest _ (ByVal requestID As Long) '检查控件的 State 属性是否为关闭的。 '如果不是, '在接受新的连接之前先关闭此连接。 If tcpServer.State <> sckClosed Then _ tcpServer.Close '接受具有 requestID 参数的 '连接。 tcpServer.Accept requestID End Sub Private Sub txtSendData_Change() '名为 txtSendData 的 TextBox 控件中 '包含了要发送的数据。当用户往文本框中 '键入数据时,使用 SendData 方法 '发送输入的字符串。 tcpServer.SendData txtSendData.Text End Sub Private Sub tcpServer_DataArrival _ (ByVal bytesTotal As Long) '为进入的数据声明一个变量。 '调用 GetData 方法,并将数据赋予名为 txtOutput '的 TextBox 的 Text 属性。 Dim strData As String tcpServer.GetData strData txtOutput.Text = strData End Sub
-
在工程中添加一个新的窗体,将其命名为 frmClient。
-
将窗体的标题改为“TCP Client”。
-
在窗体中添加一个 Winsock 控件,并将其命名为 tcpClient。
-
在 frmClient 中添加两个 TextBox 控件。将第一个命名为 txtSend,第二个为 txtOutput。
-
在窗体上放一个 CommandButton 控件,并将其命名为 cmdConnect。
-
将 CommandButton 控件的标题改为 Connect。
- 在窗体中添加如下的代码。
-
VBScript code复制代码
-
Private Sub Form_Load() 'Winsock 控件的名字为 tcpClient。 '注意:要指定远程主机,可以使用 ' IP 地址(例如:"121.111.1.1"),也可以使用 '计算机的“好听的名字”如下所示。 tcpClient.RemoteHost = "RemoteComputerName" tcpClient.RemotePort = 1001 End Sub Private Sub cmdConnect_Click() '调用 Connect 方法,初始化连接。 tcpClient.Connect End Sub Private Sub txtSendData_Change() tcpClient.SendData txtSend.Text End Sub Private Sub tcpClient_DataArrival _ (ByVal bytesTotal As Long) Dim strData As String tcpClient.GetData strData txtOutput.Text = strData End Sub
接受多个连接请求
-
VBScript code复制代码
-
Private intMax As Long Private Sub Form_Load() intMax = 0 sckServer(0).LocalPort = 1001 sckServer(0).Listen End Sub Private Sub sckServer_ConnectionRequest _ (Index As Integer, ByVal requestID As Long) If Index = 0 Then intMax = intMax + 1 Load sckServer(intMax) sckServer(intMax).LocalPort = 0 sckServer(intMax).Accept requestID Load txtData(intMax) End If End Sub
UDP 初步
-
将 RemoteHost 属性设置为另一台计算机的名称。
-
将 RemotePort 属性设置为第二个控件的 LocalPort 属性。
- 调用 Bind 方法,指定使用的 LocalPort。(下面将详细地讨论该方法。)
-
创建一个新的 Standard EXE 工程。
-
将缺省的窗体的名称修改为 frmPeerA。
-
将窗体的标题修改为“Peer A”。
-
在窗体中放入一个 Winsock 控件,并将其命名为 udpPeerA。
-
在“属性”页上,单击“协议”并将协议修改为 UDPProtocol。
-
在窗体中添加两个 TextBox 控件。将第一个命名为 txtSend,第二个命名为 txtOutput。
- 为窗体增加如下的代码。
-
VBScript code复制代码
-
Private Sub Form_Load() '控件的名字为 udpPeerA With udpPeerA '重点:必须将 RemoteHost 的值 '修改为计算机的名字。 .RemoteHost = "PeerB" .RemotePort = 1001 '连接的端口号。 .Bind 1002 '绑定到本地的端口。 End With frmPeerB.Show '显示第二个窗体。 End Sub Private Sub txtSend_Change() '在键入文本时,立即将其发送出去。 udpPeerA.SendData txtSend.Text End Sub Private Sub udpPeerA_DataArrival _ (ByVal bytesTotal As Long) Dim strData As String udpPeerA.GetData strData txtOutput.Text = strData End Sub
-
在工程中添加一个标准窗体。
-
将窗体的名字修改为 frmPeerB。
-
将窗体的标题修改为“Peer B”。
-
在窗体中放入一个 Winsock 控件,并将其命名为 udpPeerB。
-
在“属性”页上,单击“协议”并将协议修改为“UDPProtocol”。
-
在窗体上添加两个 TextBox 控件。将第一个命名为 txtSend,第二个命名为 txtOutput。
- 在窗体中添加如下的代码。
-
VBScript code复制代码
-
Private Sub Form_Load() '控件的名字为 udpPeerB。 With udpPeerB '重点:必须将 RemoteHost 的值改为 '计算机的名字。 .RemoteHost = "PeerA" .RemotePort = 1002 '要连接的端口。 .Bind 1001 '绑定到本地的端口上。 End With End Sub Private Sub txtSend_Change() '在键入后立即发送文本。 udpPeerB.SendData txtSend.Text End Sub Private Sub udpPeerB_DataArrival _ (ByVal bytesTotal As Long) Dim strData As String udpPeerB.GetData strData txtOutput.Text = strData End Sub
关于 Bind 方法
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式