logo资料库

VB实现网络通信.doc

第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
资料共15页,剩余部分请下载后查看
1.引言
2.Winsock控件介绍
3.网络通信的实现
3.1实现两台电脑之间的通信
3.2初步实现服务器和客户端的通信
3.3实现客户端之间的通信
1.引言 目前已经有多种主流的网络通信软件,也有很多种制作网络聊天室的方法。 而使用VB制作是最为简单易行的。使用VB实现网络通信方法大同小异,本次制 作参考的文献资料基本方法基本都是使用Winsock控件编写服务器端、客户端通 信程序,实现了对基于TCP /IP协议的、面向连接的流方式套接字网络通信程序 设计。 本次设计同样使用了 VB 中的 Winsock 控件完成了本次网络通信软件的设 计制作,实现了两台计算机之间的通信初步实现服务器和客户端的通信和实现客 户端之间的通信。 2.Winsock 控件介绍 Winsock 控件对用户来说是不可见的,它提供了访问 TCP 和 UDP 网络服 务的方便途径。为编写客户或服务器应用程序,不必了解 TCP 的细节或调用低 级的 Winsock APIs。通过设置控件的属性并调用其方法就可轻易连接到一台远 程机器上去,并且还可双向交换数据。
打开 Visual Basic6.0,点击“工程”→“部件”,弹出对话框,选择 Microsoft Winsock Control 6.0 。这时在工具箱中会多一个控件,这就是 Winsock 控件,现 在就可以开始使用它进行设计编程。 Winsock控件的常用属性:BytesReceived属性(接受数据的字节数),
LocalHostName属性(本地主机名称),LocalIP属性(本地主机IP),LocalPort属 性(本地主机端口),RemoteHost属性(远程主机名称),State属性(Winsock控 件)(网络状态【连接、未连接】),Protocol属性(值为0-sckTCPProtocol 时使用 TCP/ IP 协议,为1-sckUDPProtocol 时使用UDP 协议),Name属性(控件的名称), RemotePort属性(ActiveX控件)(远程主机端口),Object属性。 Winsock 控件的常用方法:Accept 方法(接受 TCP 连接请求),Bind 方法, Close 方法(关闭 TCP 连接),Listen 方法(监听 TCP 数据),PeerData 方法(获 得数据),SendData 方法(传输数据),GetData 方法(获得数据) Winsock 控件的常用事件:Close 事件(关闭连接),ConnectionRequest 事件 (连接请求),DataArrival 事件(数据到达),SendComplete 事件(数据传输完 毕),SendProgress 事件(数据传输中),Error 事件(发生错误),Connect 事件 (建立连接)。 3.网络通信的实现 本次设计使用 TCP(数据传输协议)基础数据传输协议允许创建和维护与远 程计算机的连接。连接两台计算机就可彼此进行数据传输。 如 果 创 建 客 户 应 用 程 序 , 就 必 须 知 道 服 务 器 计 算 机 名 或 者 IP 地 址 (RemoteHost 属性),还要知道进行“侦听”的端口(RemotePort 属性),然后调 用 Connect 方法。 如果创建服务器应用程序,就应设置一个收听端口(LocalPort 属性)并调 用 Listen 方法。当客户计算机需要连接时就会发生 ConnectionRequest 事件。 为了完成连接,可调用 ConnectionRequest 事件内的 Accept 方法。 建立连接后,任何一方计算机都可以收发数据。为了发送数据,可调用 SendData 方法。当接收数据时会发生 DataArrival 事件。调用 DataArrival 事件 内的 GetData 方法就可获取数据。
3.1 实现两台电脑之间的通信 新建工程将其缺省窗体命名为“frmA”;将窗体的标题改为“点对点通信 (一)”。在窗体中添加一个 WinSock 控件。在窗体中添加 3 个 TextBox 控件。 默认其命名为 Text1、TxtOutput、TxtSend,并将其内容清空;将 TxtOutput 和 TxtSend 的 MultiLine 属性设置为 True,ScrollBars 属性设置为 2-Vertical。在窗体 中添加 2 个 CommandButton 控件,并将它们的 Caption 属性分别修改为“设置”、 “发送”。在窗体上放四个 Label 控件,其命名默认为 Label1、Label2、Label3, 并将它们的 Caption 属性修改为“计算机名称(IP 地址)”、“接收信息”、“发送 信息”。如图: 在代码窗口添加代码: Private Sub Command1_Click() With WB .RemoteHost = Text1.Text .RemotePort = 1002 .Bind 1001 End With txtSend.Enabled = True Command1.Enabled = False End Sub Private Sub Command2_Click() WB.SendData txtSend.Text End Sub Private Sub WB_DataArrival(ByVal bytesTotal As Long) Dim strdata As String WB.GetData strdata txtOutput.Text = strdata
End Sub 同样,新建工程,添加窗体点对点通信(二): 代码相同。 运行后输入对方计算机 IP 地址,点击设置;然后就可以发送信息了。 3.2 初步实现服务器和客户端的通信 服务器端: 创建新工程将其缺省窗体命名为“服务器”;将窗体的标题改为“服务器”。 在窗体中添加一个 WinSock 控件,默认其命名为 scksever。在窗体中添加 5 个 TextBox 控件。默认其命名为 Txt_Sever、Text1、Text2、Text3、Text4,并将其 内容清空;将 Txt_Sever 的 MultiLine 属性设置为 True,ScrollBars 属性设置为 2-Vertical。在窗体中添加 2 个 CommandButton 控件。其命名默认为 Command1、 cmd_fs,并将它们的 Caption 属性分别修改为“设置为服务器”、“发送信息”。在 窗体上放四个 Label 控件,其命名默认为 Label1、Label2、Label3、Label4,并 将它们的 Caption 属性修改为“本机 IP”、“客户端 IP”、“本机端口”、“客户端端 口”。如图:
scksever.LocalPort = Text3.Text scksever.RemotePort = Text4.Text scksever.Listen MsgBox "设本机为服务器成功!", vbInformation, "提示" Command1.Enabled = False End If End Sub Private Sub scksever_connectionrequest(ByVal RequestID As Long) If scksever.State <> sckClosed Then scksever.Close scksever.Accept RequestID End Sub Private Sub cmd_fs_click() If scksever.State = 7 Then If Txt_Sever.Text = "" Then MsgBox "不能发送空信息" Else scksever.SendData "SENDINF" & Txt_Sever.Text End If 在代码窗口输入如下代码: Private Sub Command1_Click() Text1.Text = scksever.LocalIP If Text2.Text = "" Or Text3.Text = "" Then MsgBox "输入的内容不完全", , "提示信息" Else Else MsgBox "没有连接,请查证后再试", vbInformation, "错误" End If End Sub Private Sub scksever_dataarrival(ByVal bytestotal As Long) Dim strdata As String
scksever.GetData strdata Txt_Sever.Text = strdata End Sub 客户端: 同样,新建工程,如图新建客户端窗体。 在代码窗口输入如下代码: Private Sub Command1_Click() If txtip.Text = "" Then MsgBox "请输入服务器的 IP 地址,后连接", vbInformation, "提示" txtip.SetFocus Exit Sub ElseIf Text3.Text = "" Then MsgBox "请输入本机的端口号,后连接", vbInformation, "提示" Text3.SetFocus Exit Sub ElseIf Text4.Text = "" Then MsgBox "请输入服务器的端口号", vbInformation, "提示" Text4.SetFocus Exit Sub Else Command1.Enabled = False sckclient.RemoteHost = txtip.Text sckclient.LocalPort = Text3.Text sckclient.RemotePort = Text4.Text sckclient.Connect End If End Sub Private Sub Command2_Click() If sckclient.State = 7 Then
If Text1.Text = "" Then MsgBox "不能发送空信息" Else sckclient.SendData Text1.Text End If Else MsgBox "没有连接,请查证后再试", vbInformation, "错误" End If End Sub Private Sub sckclient_dataarrival(ByVal bytestotal As Long) Dim strdata As String sckclient.GetData strdata Text1.Text = strdata End Sub Private Sub Command3_Click() txtip.Text = "" Text3.Text = "" Text4.Text = "" sckclient.Close Command1.Enabled = True End Sub 至此,服务器和客户端初步完成,试运行正常。 3.3 实现客户端之间的通信 服务器端: 在服务器端创建一个新的工程将其命名为“服务器”。将缺省窗体命名为“服务 器”。在窗体中添加一个 ListBox 控件,将其命名为“ListBox”。
分享到:
收藏