用VB创建自己的通信程序 |
|
www.nanhushi.com 佚名 不详 |
Winsock控件建立在TCP、UDP的协议基础上,以完成计算机网络间的通信。下面将详细的介绍具体的程序创建过程,以便使大家更好的理解程序的源代码。
服务器端程序的运行过程是:
(1)服务器端要设置好侦听端口即LocalPort属性,作为侦听端口的值必须是一个整数(一定要是其它TCP/IP应用程序没有用过的值,并且不能与系统缺省端口冲突)。
(2)用Listen方法进入侦听状态,等待客户机的连接请求。
(3)当客户机发出连接请求时,使服务器产生一个ConnectionRequest事件,且该事件得到一个参数equestID。
(4)服务器程序用Accept方法接受客户机requestID请求。这样,服务器程序便可以用SendData方法来发送数据了。但是,Accept方法必须用上一个步得到的requestID作为其参数。
(5)当服务器程序接收到数据时,便会产生一个DataArrial事件,参数BytesTotal包含接收到的数据字节数。在该事件中,可以用GetData方法接收数据。
(6)如果接收到Close事件,则用Close方法关闭TCP/IP连接。
客户机的程序的运行过程是:
(1)在客户程序中设置Remmotehost属性,以便指定运行服务器程序的主机名,该字符串可以在服务器“ 控制面板 网络 标识 计算机”中查到。
(2)设置RemotePort属性,以便指定服务器程序的侦听端口(其设置方法与服务器端类似)。
(3)使用Connect方法,向服务器提出连接请求。
(4)当服务器程序接受到客户机程序的请求后,客户机程序产生Connect事件,就可以用SendData方法发送数据了。
(5)当客户机程序接收到数据时,便会产生DataArrival事件,参数BytesTotal包含接收到的数据字节数。类似的在该事件中也可以用GetData方法接收数据。
(6)如果客户机程序接收到Close,则用Close方法关闭连接。
使用说明:
本程序实现了两台计算机之间的自由通信。先将编译好的程序分别放入两台已联网的计算机的 开始 启动 中,这样每次启动时,程序将会自动运行,程序启动时将以最小化的形式出现在任务栏中,当用户使用时可以通过点击任务栏上的该程序图标来激活该程序,一方将程序激活后,在“请输入所要连接的主机名:“右侧的编辑框中输入需要连接的计算机名,并敲“连接”键便可连接成功。此时在“接收窗口:”下的编辑框中将会出现“连接成功”的提示。然后就可以在“发送窗口:”下的编辑框中输入要说的话了,输入完毕后敲“发送”键后便可使另一方收到你的话了,如果另一方的程序尚未正常化,那么另一方程序将发出提示音并使任务栏中程序的图标闪烁,直到另一方将程序激活为正常化并与你对话为止。如果暂时停止对话可以点击该程序的极小化按钮将程序最小化,一旦需要再次通话可直接激活该程序发送过去,如果另一方的程序尚未正常化,那么程序仍将发出提示音并使开使栏中程序的小图标闪烁,直到另一方将程序正常化并与你对话为止。所以,无论什么时候想与对方通话只要对方开了机便可以实现。当需要断开连接时请按“关闭”键,该程序能自动发送结束消息,使对方能够知道你已断开连接,以结束程序运行。
FORM的构造如下:
Timer控件----MMXControl控件----Gettest控件
Winsock控件----CommandButton控件----Test控件
一段的源程序如下:
Dim sign As Boolean
Dim flashsign As Boolean
Dim con As Boolean
Private Sub transfer_Click()
On Error GoTo transfererror
Timer1.Enabled = False
gettext.Text = " 陈涛说:" + sendtext.Text + Chr(13) + Chr(10) + gettext.Text
Dim say As String
If sign = True Then
say = " 陈涛说:" + sendtext.Text + Chr(13) + Chr(10)
Winsockout.SendData say
Else
say = " 陈涛说:" + sendtext.Text + Chr(13) + Chr(10)
Winsock1.SendData say
End If
sendtext.Text = ""
Exit Sub
transfererror:
Dim a As String
a = " 计算机还没有进入网络或者是它的相应程序没有运行!"
MsgBox (a)
End
Exit Sub
End Sub
Private Sub conbut_Click()
On Error GoTo connecterror
Winsockout.RemoteHost = hostnametext.Text
Winsockout.Connect
sign = True
conbut.Default = False
transfer.Default = True
Exit Sub
connecterror:
Dim a As String
a = "计算机还没有进入网络或者是它的相应程序没有运行!"
Dim b As String
b = " 要连接的机器名输入错误,"
MsgBox (b + a)
End
Exit Sub
End Sub
Private Sub exitbut_Click()
On Error GoTo exiterror
If con = True Then
End
End If
If sign = True Then
Winsockout.SendData "中断联接!"
Else
Winsock1.SendData "中断联接!"
End If
Exit Sub
exiterror:
Dim a As String
a = "计算机还没有进入网络或者是它的相应程序没有运行!"
MsgBox (a)
End
Exit Sub
End Sub
Private Sub Form_Load()
Winsock1.Listen
sign = False
flashsign = True
Timer1.Enabled = False
con = False
conbut.Default = True
End Sub
Private Sub hostnametext_Change()
conbut.Enabled = True
End Sub
Private Sub Timer1_Timer()
If Form1.WindowState = 1 Then
If flashsign = True Then
Form1.Icon = LoadPicture(App.Path + "\zhcn010.ico")
flashsign = False
ElseIf flashsign = False Then
Form1.Icon = LoadPicture(App.Path + "\zhcn020.ico")
flashsign = True
End If
End If
End Sub
Private Sub Winsock1_Close()
conbut.Enabled = True
hostnametext.Enabled = True
Winsock1.Close
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> 0 Then
Winsock1.Close
End If
transfer.Default = True
If Form1.WindowState = 1 Then
Timer1.Enabled = True
MMControl1.Notify = False
Form1.MMControl1.Wait = True
Form1.MMControl1.Shareable = False
Form1.MMControl1.DeviceType = "waveaudio"
Form1.MMControl1.filename = App.Path + "\mcitest.wav"
Form1.MMControl1.Command = "Open"
Form1.MMControl1.Command = "play"
Form1.MMControl1.Command = "prev"
End If
conbut.Enabled = False
hostnametext.Enabled = False
sendtext.Enabled = True
gettext.Enabled = True
gettext.Text = " 连 接 成 功!" + Chr(13) + Chr(10)
sign = False
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim str As String
If Form1.WindowState = 1 Then
Timer1.Enabled = True
MMControl1.Notify = False
Form1.MMControl1.Wait = True
Form1.MMControl1.Shareable = False
Form1.MMControl1.DeviceType = "waveaudio"
Form1.MMControl1.filename = App.Path + "\mcitest.wav"
Form1.MMControl1.Command = "Open"
Form1.MMControl1.Command = "play"
Form1.MMControl1.Command = "prev"
End If
Winsock1.GetData str
If str = "中断联接!"Then
con = True
Winsock1.SendData "可以中断联接!"
ElseIf str = "可以中断联接!" Then
End
End If
gettext.Text = str + gettext.Text
End Sub
Private Sub Winsockout_Close()
hostnametext.Enabled = True
Winsockout.Close
End Sub
Private Sub Winsockout_Connect()
Form1.WindowState = 0
gettext.Enabled = True
sendtext.Enabled = True
conbut.Enabled = False
gettext.Text = "连接成功!" + Chr(13) + Chr(10)
End Sub
Private Sub Winsockout_DataAr
|
|
|
文章录入:杜斌 责任编辑:杜斌 |
|
上一篇文章: 如何建立拨号联接 下一篇文章: 用VB开发标准CGI程序 |
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
|