| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> vb >> Internet >> 文章正文
MultiLink的WinSock Server程式            【字体:
MultiLink的WinSock Server程式
作者:-    文章来源:-    点击数:    更新时间:2006-9-8

我们要先有一个观念,在VB中,

1.一个WinSock 控制项(当Server)只能连结一个Client端的需求,所以Server要变成可多重
    连结,要有多个WinSock控制项,我们也可以使用Load 指令来动态产生
2.Server端必须设定好一个Local Port 当作其Listen的Port,所有Client端的RemotePort要
   指定Server 当Listen的Port Number,以本例来说,我设定3128当作Server Listen的
   Port,而我的程式中有一个WinSock Control (Winsock1(0))专门做Listen的动作。在本
   例中,我只允许有4个Cllient同时连上来,所以我在Form Load时,便动态产生4个
   WinSock ,含Listen  的那一个一共5个WinSock Control。
3.在Server端,如果ConnectionRequest Event产生了,代表有Client端提出需求,这时
   候,我们要选取一个没有使用的WinSock Control来和Client连。
4.我们在Client中,设定LocalPort = 0 代表会选取一个空着的Port来和Server的Port来连
  在Server中   Winsock1(i).Accept requestID 便会自动为我们做这件事;这时,我们会看
  到Server端的会Assign一个RemotePort,而Client也会Assign一个LocalPort,这次的连
  线便是透过这组连线管道来做

该程式请将Client的程式做成.Exe再来重覆行,且Server的程式同时也要执行,当Client
端的Text1.Text = "Close" 来送给Server时,告知Server该Connection 可结束
其他相关的知识请查Help或其他书

注: GetData方法 的第一个叁数 :如果传回的资料是String则宣告成String,若告成Variant
   在VB环境下没问题,但变成.exe後会有错(Automation Error);当然,若传的是Binary
   的资料,那就使用ByteArray来做
'以下是Server端程式,需一个ListBox,一个WinSock控制项
Option Explicit

Private Sub Form_Load()
Load Winsock1(1)
Load Winsock1(2)
Load Winsock1(3)
Load Winsock1(4)

Winsock1(0).LocalPort = 3128  '设定Listen的Port是3128,请自行改成您的电脑没冲突的号码
Winsock1(0).Listen
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim i As Long
For i = 0 To 4
   Winsock1(i).Close
Next
Unload Winsock1(1)
Unload Winsock1(2)
Unload Winsock1(3)
Unload Winsock1(4)
End Sub

Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Dim i As Long
For i = 1 To 4
   If Winsock1(i).State = sckClosed Then
      Winsock1(i).Accept requestID
      List1.AddItem "Local Port=" + Str(Winsock1(i).LocalPort) + " RemotePort = " + Str(Winsock1(i).RemotePort)
      Exit For
   End If
Next
End Sub

Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
'Dim mydata As Variant
Dim mydata As String '注:如果传回的资料是String则宣告成String,若告成Variant
                                      '在VB环境下没问题,但变成.exe後会有错(Automation Error)
Winsock1(Index).GetData mydata, vbString
List1.AddItem "From Socket" + Str(Index) + "  " + mydata
Winsock1(Index).SendData "WinSock" + Str(Index) + "Reply"
If mydata = "Close" Then
   Winsock1(Index).Close
End If
End Sub



'以下是Client端程式,需一个ListBox,一个WinSock控制项,三个Command Button
'与一个TextBox用来传资料,
Option Explicit

Private Sub Command1_Click()
Winsock1.LocalPort = 0	'以便自动产生Local Port
Winsock1.Connect  "140.116.253.247" '设定改成您 Server 电脑的IP 号码
End Sub

Private Sub Command2_Click()
Winsock1.SendData  "Close"  '通知Server端Close
DoEvents
Winsock1.Close
End Sub

Private Sub Command3_Click()
Winsock1.SendData Text1.Text
End Sub

Private Sub Form_Load()
Winsock1.RemotePort = 3128  '设定与Server端做Listen的Port相同
Command1.Caption = "Connect"
Command2.Caption = "Close"
Command3.Caption = "Send"
List1.Clear
End Sub

Private Sub Form_Unload(Cancel As Integer)
If Winsock1.State <> sckClosed Then
   Winsock1.SendData  "Close"
   DoEvents
   Winsock1.Close
   Winsock1.LocalPort = 0
End Sub

Private Sub Winsock1_Connect()
If Winsock1.State = sckConnected Then
   List1.AddItem "Connected! LocalPort =" + Str(Winsock1.LocalPort) + " RemptePort = " + Str(Winsock1.RemotePort)
End If

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim mydata As String
Winsock1.GetData mydata, vbString
List1.AddItem mydata
End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
List1.AddItem Description
End Sub

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 用VB编写DirectX7.0游戏(下…

  • 用VB编写DirectX7.0游戏(上…

  • 使用OLE DB和ADO调用返回记录…

  • 使用VB调用Oracle程序包内的…

  • VB中用ADO对象动态创建数据库…

  • fffff

  • 如何用MSComm Control传Bina…

  • 用VB制作浏览器

  • 用VB编写网络寻呼机

  • 制作自己的网络搜索软件

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |