您好,欢迎访问三七文档
1.引言目前已经有多种主流的网络通信软件,也有很多种制作网络聊天室的方法。而使用VB制作是最为简单易行的。使用VB实现网络通信方法大同小异,本次制作参考的文献资料基本方法基本都是使用Winsock控件编写服务器端、客户端通信程序,实现了对基于TCP/IP协议的、面向连接的流方式套接字网络通信程序设计。本次设计同样使用了VB中的Winsock控件完成了本次网络通信软件的设计制作,实现了两台计算机之间的通信初步实现服务器和客户端的通信和实现客户端之间的通信。2.Winsock控件介绍Winsock控件对用户来说是不可见的,它提供了访问TCP和UDP网络服务的方便途径。为编写客户或服务器应用程序,不必了解TCP的细节或调用低级的WinsockAPIs。通过设置控件的属性并调用其方法就可轻易连接到一台远程机器上去,并且还可双向交换数据。打开VisualBasic6.0,点击“工程”→“部件”,弹出对话框,选择MicrosoftWinsockControl6.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地址)”、“接收信息”、“发送信息”。如图:在代码窗口添加代码:PrivateSubCommand1_Click()WithWB.RemoteHost=Text1.Text.RemotePort=1002.Bind1001EndWithtxtSend.Enabled=TrueCommand1.Enabled=FalseEndSubPrivateSubCommand2_Click()WB.SendDatatxtSend.TextEndSubPrivateSubWB_DataArrival(ByValbytesTotalAsLong)DimstrdataAsStringWB.GetDatastrdatatxtOutput.Text=strdataEndSub同样,新建工程,添加窗体点对点通信(二):代码相同。运行后输入对方计算机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”、“本机端口”、“客户端端口”。如图:在代码窗口输入如下代码:PrivateSubCommand1_Click()Text1.Text=scksever.LocalIPIfText2.Text=OrText3.Text=ThenMsgBox输入的内容不完全,,提示信息Elsescksever.LocalPort=Text3.Textscksever.RemotePort=Text4.Textscksever.ListenMsgBox设本机为服务器成功!,vbInformation,提示Command1.Enabled=FalseEndIfEndSubPrivateSubscksever_connectionrequest(ByValRequestIDAsLong)Ifscksever.StatesckClosedThenscksever.Closescksever.AcceptRequestIDEndSubPrivateSubcmd_fs_click()Ifscksever.State=7ThenIfTxt_Sever.Text=ThenMsgBox不能发送空信息Elsescksever.SendDataSENDINF&Txt_Sever.TextEndIfElseMsgBox没有连接,请查证后再试,vbInformation,错误EndIfEndSubPrivateSubscksever_dataarrival(ByValbytestotalAsLong)DimstrdataAsStringscksever.GetDatastrdataTxt_Sever.Text=strdataEndSub客户端:同样,新建工程,如图新建客户端窗体。在代码窗口输入如下代码:PrivateSubCommand1_Click()Iftxtip.Text=ThenMsgBox请输入服务器的IP地址,后连接,vbInformation,提示txtip.SetFocusExitSubElseIfText3.Text=ThenMsgBox请输入本机的端口号,后连接,vbInformation,提示Text3.SetFocusExitSubElseIfText4.Text=ThenMsgBox请输入服务器的端口号,vbInformation,提示Text4.SetFocusExitSubElseCommand1.Enabled=Falsesckclient.RemoteHost=txtip.Textsckclient.LocalPort=Text3.Textsckclient.RemotePort=Text4.Textsckclient.ConnectEndIfEndSubPrivateSubCommand2_Click()Ifsckclient.State=7ThenIfText1.Text=ThenMsgBox不能发送空信息Elsesckclient.SendDataText1.TextEndIfElseMsgBox没有连接,请查证后再试,vbInformation,错误EndIfEndSubPrivateSubsckclient_dataarrival(ByValbytestotalAsLong)DimstrdataAsStringsckclient.GetDatastrdataText1.Text=strdataEndSubPrivateSubCommand3_Click()txtip.Text=Text3.Text=Text4.Text=sckclient.CloseCommand1.Enabled=TrueEndSub至此,服务器和客户端初步完成,试运行正常。3.3实现客户端之间的通信服务器端:在服务器端创建一个新的工程将其命名为“服务器”。将缺省窗体命名为“服务器”。在窗体中添加一个ListBox控件,将其命名为“ListBox”。在窗体中添加一个WinSock控件,其名默认为Winsock1,并将其属性“Index”属性设置为0,如下图:设置完以后,Winsock1会变成Winsock1(0)。在窗体上添加一个TextBox控件,其名默认为Text3,将其初值设置为0。在窗体上添加两个Label控件,其名默认为Label1、Label2,并将它们的Caption属性改为“在线人数”、“客户端IP列表”。在代码窗口中添加如下代码:PrivateGac()AsBooleanDimSocknumberAsInteger'定义变量PrivateSubForm_Load()'开始运行时显示窗口的属性以及执行的操作Winsock1(0).LocalPort=1600Winsock1(0).Protocol=sckTCPProtocolMe.Caption=服务器&-&Winsock1(0).LocalIP&:&Winsock1(0).LocalPortWinsock1(0).ListenSocknumber=0EndSubPrivateSubForm_Unload(CancelAsInteger)'unload时关闭winsockWinsock1(0).CloseEndSubPrivateSubWinsock1_Close(IndexAsInteger)'关闭winsockWinsock1(Index).CloseUnloadWinsock1(Index)Gac(Index)=FalseText3.Text=Int(Text3.Text)-1EndSubPrivateSubWinsock1_ConnectionRequest(IndexAsInteger,ByValrequestIDAsLong)DimipAsStringSocknumber=Socknumber+1'连接请求LoadWinsock1(Socknumber)Winsock1(Socknumber).AcceptrequestIDReDimPreserveGac(Socknumber)Gac(Sock
本文标题:3VB实现网络通信
链接地址:https://www.777doc.com/doc-4771339 .html