精品主页 | 软件下载 | 系统下载 | 精品导航| 精彩图片 | 转帖工具 | 版主申请 | 影视下载
发新话题
打印

用VB创建自己的通信程序

用VB创建自己的通信程序

  


                    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

TOP

发新话题