VB网络通讯程序设计
WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器并进行数据交换。这两种协议都能用来创建客户端和服务端应用程序。就像定时器控件一样,WinSock控件运行时没有一个可视的界面。下面就是分别用TCP和UDP协议来创建的网络聊天软件。
TCP协议
网络聊天程序的运行过程及原理
第一步:建立连接
主要过程是:由客户端程序向服务端程序发出连接请求,服务端程序收到并接受连接请求,至此客户机与服务器创建了数据交流通道。
第二步:开始聊天
主要过程是:在客户机的“发送的信息”文本框中输入文字时,服务器端的“收到的信息”文本
框中就会实时地显示相同的文字,反之亦然。
服务器的界面设计
1.创建一个connect下载“标准 EXE”工程,选中“工程”菜单的“部件”,在控件中到Microsoft Winsock Control并将其选中。
2.将Form1的名称改为Form_Load(),并在其中添加两个命令按钮(Command1的Caption属性为“退出”,Command2的Caption属性为“发送”)。
3.在窗体是添加三个TextBox控件,其名称分别为txtServerIP,txtSend和txtReceive。
4.在窗体上添加一个Winsock控件,将其Protocol(协议)属性设置为0(即sckTCPProtocol)。
服务器端的源代码:
Private Sub Form_Load()
'设置侦听端口
WinsockServer.LocalPort = 10001
'读取服务器的IP地址
txtServerIP.Text = WinsockServer.LocalIP
'开始侦听
WinsockServer.Listen
End Sub
Private Sub Command1_Click()
'点击“退出”按钮后关闭应用程序
Unload Me
End Sub
Private Sub Command2_Click()
'只要txtSend文本框的内容写好以后就由WinsockServer控件发送
WinsockServer.SendData txtSend.Text
End Sub
Private Sub WinsockServer_ConnectionRequest(ByVal requestID As Long)
'当收到连接请求时,Winsock处于侦听状态
'此时应该使用Close方法关闭Winsock,然后使用Accept方法接受连接请求
WinsockServer.Close
WinsockServer.Accept requestID
End Sub
Private Sub WinsockServer_DataArrival(ByVal BytesTotal As Long)
'当客户端有信息发送来时,利用WinsockServer控件的GatData方法读取数据
'并将其显示在txtReceive文本框中
Dim MyStr As String
WinsockServer.GetData MyStr
txtReceive.Text = MyStr
End Sub
运行界面如下图:
客户端的界面设计
1.创建一个新的“标准 EXE”工程,并添加Winsock 控件。
2.将Form1的名称改为Form_Load(),并在其中添加两个命令按钮(Command1的Caption属性为“退出”, Command2的Caption属性为“连接服务器” ,Command3的Caption属性为“发送”)。
3.在窗体是添加四个TextBox控件,其名称分别为txtClientIP,txtServerIP,txtSend和txtReceive。
4.在窗体上添加一个Winsock控件,将其Protocol(协议)属性设置为0(即sckTCPProtocol)。
客户端的源代码:
Private Sub Form_Load()
'设置聊天服务器的侦听端口
WinsockClient.RemotePort = 10001
'读取本机的IP地址
txtClientIP.Text = WinsockClient.LocalIP
End Sub
Private Sub Command1_Click()
'点击“退出”按钮后关闭应用程序
Unload Me
End Sub
Private Sub Command2_Click()
'根据txtServerIP文本框中输入的服务器IP,连接聊天服务器
WinsockClient.RemoteHost = txtServerIP.Text
WinsockClient.Connect
End Sub
Private Sub Command3_Click()
'输入txtSend文本框的内容后由WinsockServer控件发送
WinsockClient.SendData txtSend.Text
End Sub
Private Sub WinsockClient_Connect()
'如果与服务器连接成功,则向用户提供下列信息
MsgBox "你成功地与聊天服务器进行了连接", vbInformation
End Sub
Private Sub WinsockClient_DataArrival(ByVal BytesTotal As Long)
'当服务器有信息发送来时,利用WinsockClient控件的GatData方法读取数据
'并将其显示在txtReceive文本框中
Dim MyStr As String
WinsockClient.GetData MyStr
txtReceive.Text = MyStr
End Sub
运行界面如下图:
通讯实现过程
通过以上的准备工作后,分别把服务器和客户端生成exe(可执行)文件:服务器.exe和客户端.exe。今后我们只需要用这两个软件就行,就算我们计算机上没有安装Visual Basic 6.0也可以使用。
首先打开这两个软件服务器.exe和客户端.exe,在服务器中软件会自动检测出本台计算机的IP地址,并写入对应文本框中。客户端软件也能检测出本台计算机的IP地址,并写入对应文本框中。
1.自发自接型
我们先在客户端软件中的“txtServerIP”中输入要连接的服务器IP地址,然后点击“连接服务器”按钮,如果与服务器连接成功后,则会弹出连接成功对话框,如下图
之后在客户端的txtSend中向服务器发送消息,这时服务器会收到客户端发来的消息。同时,服务器也可以向客户端发送消息,这时客户端也会收到服务器的消息。以上操作均在一台计算机上完成。通讯界面如下图
2.两台计算机间通讯型
把服务器.exe和客户端.exe拷贝到另一台计算机上,打开它们,跟上面的方法类似,区别在于不是写自己的IP,而是写另外一台计算机的IP,另外一台计算机写你的IP。这里我的IP是10.1.214.28,另一台计算机IP是10.1.214.121。这样两台计算机就可以连接并进行通讯了。通讯界面如下图
用户1
用户2
UDP协议
UDP( User Datagram Protocol) 是一种无连接协议,与TCP操作不同,计算机间并不需要建立一个连接,同时,一个UDP应用可同时作为应用的客户或服务器方。
聊天A程序源代码
Private Sub Command1_Click()
Winsock1.SendData Text1.Text '发送文本
End Sub
Private Sub Form_Load()
With Winsock1
.RemoteHost = "user-PC" '要连接到的计算机名
.RemotePort = 1010 '要连接到的端口号
.LocalPort = 1011 '该Winsock控制将要使用的本地端口号,便于其它端与该Winsock通讯
.Bind 1011 '将该Winsock控制绑定到该本地端口
End With
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock1.GetData strData, vbString
Text2.Text = strData
End Sub
聊天B程序源代码
Private Sub Form_Load()
With Winsock1
.RemoteHost = "user-PC" '要连接到计算机的IP地址
.RemotePort = 1011 '要连接到的端口号
.LocalPort = 1010 '该Winsock控制将使用的本地端口号,便于其它方与之通讯
.Bind 1010 '将该Winsock控制绑定到该本地端口
End With
End Sub
Private Sub txtSend_Change()
Winsock1.SendData txtSend.Text '发送文本
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock1.GetData strData, vbString
Text2.Text = strData
End Sub
Private Sub Command1_Click()
Winsock1.SendData Text1.Text '发送文本
End Sub
通讯实现过程
1.自发自接型
首先把这两个工程生成可执行文件(exe):聊天A.exe和聊天B.exe。然后在同一台计算机上打开它们(计算机上没有安装Visual Basic 6.0也可以打开),这样聊天A.exe和聊天B.exe就
可以互相发送信息了 。通讯过程如下图
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论