VB下实现用Winsock控件通信_第1页
VB下实现用Winsock控件通信_第2页
VB下实现用Winsock控件通信_第3页
VB下实现用Winsock控件通信_第4页
VB下实现用Winsock控件通信_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

论文专家件件精品“中国论文库”精心整理教育、职称类精品论文:VB下实现用Winsock控件通信贾永胜 冯秀彦一、 Winsock基础Winsock 控件对用户来说是不可见的,它提供了访问 TCP 和 UDP 网络服务的方便途径。Microsoft Access、Visual Basic、Visual C+ 或 Visual FoxPro 的开发人员都可使用它。为编写客户或服务器应用程序,不必了解 TCP 的细节或调用低级的 Winsock API。通过设置控件的属性并调用其方法就可轻易连接到一台远程机器上去,并且还可双向交换数据。二、 设计思路如果创建服务器应用程序,就应设置一个收听端口(LocalPort 属性)并调用 Listen 方法。当客户计算机需要连接时就会发生 ConnectionRequest 事件。为了完成连接,可调用 ConnectionRequest 事件内的 Accept 方法。如果创建客户应用程序,就必须知道服务器计算机名或者 IP 地址(RemoteHost 属性),还要知道进行“侦听”的端口(RemotePort 属性),然后调用 Connect 方法。建立连接后,任何一方计算机都可以收发数据。为了发送数据,可调用 SendData 方法。当接收数据时会发生 DataArrival 事件。调用 DataArrival 事件内的 GetData 方法就可获取数据。三、 服务器端窗口设计新建一工程,工程命名server,将form1窗体的name和caption属性分别改为serverfrm和server,将serverfrm窗体的borderstyle设为3-fixed dialog,增加3个lable控件,分别命名label1、label2、label3,增加一个listbox控件,name设为receive,此控件用来显示通讯双方发送的信息。增加一个text控件,name设为sendtxt,text属性设为空,此控件用来输入要发送给对方的信息。然后在窗体上添加两个button控件,分别命名为send和 exit,caption属性分别为发送和退出,再增加一个timer控件和一个winsock控件,分别命名为timer1和winsok,调整控件大小和位置如下:四、 服务器端代码Dim message(20) As Variant 定义message数组用来存放发送和接收的信息Dim numb As Integer 定义numb,用来确定listbox显示记录数目Private Sub exit_Click()End 结束程序End SubPrivate Sub Form_Load() Me.Winsok.LocalPort = 2000 设置服务器端接收端口 Me.Winsok.Listen 服务器侦听 Me.Label2.Caption = 消息发送窗口 numb = 1 初始化numbEnd SubPrivate Sub send_Click()If Trim(Me.sendtxt.Text) = Then 不允许向对方发送空消息MsgBox 不能发送空消息!, vbInformationElse If Me.Winsok.State sckConnected Then MsgBox error!, vbInformation 如果不是连接状态下将提示出错 Else Me.Winsok.SendData Trim(Me.sendtxt.Text) If numb 20 Then For numb = 1 To 19 message(numb) = message(numb + 1) Next numb End If message数组中只保存最后的20条记录 message(numb) = Me.Winsok.LocalIP & : & Me.sendtxt.Text numb = numb + 1 Me.Label3.Caption = 消息已经发送 Me.sendtxt.Text = Me.sendtxt.SetFocus add End IfEnd IfEnd Sub下面的timer控件用来随时向用户提示连接状态Private Sub Timer1_Timer() If Me.Winsok.State = sckListening Then Me.Label1.Caption = 正在侦听 ElseIf Me.Winsok.State = sckConnecting Then Me.Label1.Caption = 正在连接 ElseIf Me.Winsok.State = sckConnected Then Me.Label1.Caption = 已连接 & Me.Winsok.RemoteHostIP Me.Label3.Caption = 等待发送消息 End IfEnd SubPrivate Sub Winsok_ConnectionRequest(ByVal requestID As Long) If Me.Winsok.State sckClosed Then Me.Winsok.Close Me.Winsok.Accept requestID 接受连接End SubPrivate Sub Winsok_DataArrival(ByVal bytesTotal As Long)Dim messa As String 定义messa字符串变量Me.Winsok.GetData messa, vbString 得到对方发来的信息并存在messa字符串变量中If numb 20 Then For numb = 1 To 20 message(numb) = message(numb + 1) Next numbEnd Ifmessage(numb) = Me.Winsok.RemoteHostIP & : & messa 将messa中的信息添加到message数组中numb = numb + 1addEnd SubFunction add() Dim recora As Integer Me.receive.Clear 先清空receive中的条目 recora = numb - 1 While recora = 1 Me.receive.AddItem message(recora) 将messga数组中的记录添加到receive中 recora = recora - 1 WendEnd Function五、 客户端窗口设计新建一工程,工程命名client,将form1窗体的name和caption属性分别改为clinetfrm和client,将clientfrm窗体的borderstyle设为3-fixed dialog,增加3个lable控件,分别命名label1、label2、label3,增加一个listbox控件,name设为receive,此控件用来显示通讯双方发送的信息。增加一个text控件,name设为sendtxt,text属性设为空,此控件用来输入要发送给对方的信息。然后在窗体上添加两个button控件,分别命名为send和 exit,caption属性分别为发送和退出,再增加一个timer控件和一个winsock控件,分别命名为timer1和winsok,调整控件大小和位置如下:六、 客户端代码Dim reip As String 定义用来确定服务器端ip的变量Dim numb As IntegerDim message(20) As VariantPrivate Sub exit_Click()End 结束End SubPrivate Sub Form_Load()Me.Label2.Caption = 消息发送窗口reip = InputBox(请输入对方ip, 提示) 提示输入服务器ipWhile Trim(reip) = If MsgBox(输入的ip为空,不能连接,继续吗?, vbOKCancel) = vbOK Thenreip = InputBox(请输入对方ip, 提示) ip为空则出现提示Elsereip = 0.0.0.0End IfWendIf reip 0.0.0.0 Thenconnect (reip) ip不为空则开始执行连接过程End Ifnumb = 1End SubFunction connect(ip As String)Me.Winsok.connect ip, 2000通过端口2000连接服务器端,端口必须和服务器端设置的侦听端口一致End FunctionPrivate Sub Winsok_DataArrival(ByVal bytesTotal As Long)Dim messa As StringMe.Winsok.GetData messa, vbString 得到对方发来的信息并存在messa字符串变量中If numb 20 Then For numb = 1 To 20 message(numb) = message(numb + 1) Next numbEnd If message数组中只保存最后的20条记录message(numb) = Me.Winsok.RemoteHostIP & : & messanumb = numb + 1addEnd SubFunction add() Dim recora As Integer Me.receive.Clear recora = numb - 1 While recora = 1 Me.receive.AddItem message(recora) 将信息添加到当前窗口的receive中 recora = recora - 1 WendEnd Function下面的timer控件用来随时向用户提示连接状态Private Sub Timer1_Timer() If Me.Winsok.State = sckConnecting Then Me.Label1.Caption = 正在连接 & reip & . ElseIf Me.Winsok.State = sckConnected Then Me.Label1.Caption = 已连接 & Me.Winsok.RemoteHostIP Me.Label3.Caption = 等待发送消息 End IfEnd SubPrivate Sub send_Click()If Trim(Me.sendtxt.Text) = ThenMsgBox 不能发送空消息!, vbInformation 不允许向对方发送空消息Else If Me.Winsok.State sckConnected Then MsgBox error!, vbInformation 如果不是连接状态下将提示出错 Else Me.Winsok.SendData Trim(Me.sendtxt.Text) If numb 20 Then For numb = 1 To 19 message(numb) = message(numb + 1) Next numb End If message(numb) = Me.Winsok.LocalIP & : & Me.s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论