狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

vb中利用winsock控件,tcp協議實現多客戶端連接

admin
2013年12月10日 22:12 本文熱度 5868

通信程序通常都是采用Client/Server形式。這就要求作為服務器的主機可以同時處理多個客戶的請求。因此在編寫服務器程序時要添加多個Winsock控件。在開始我們先加入兩個Winsock控件。其中一個用來偵聽網上請求信號,取名為Listener;另外一個為初始的連接口,取名叫Sock(0)。注意,后一個控件要設為動態數組的形式,以后當客戶增多時,可在這個控件基礎上動態增加。由于受資源限制,我們在本例中設定最多可以同時接納15個客戶??蛻魴C一般只與一個主機相連,因此程序只須一個Winsock進行連接就足夠了。這個程序要用到的控件較少,除了Winsock和Form控件外,只須再添加Commmand控件即可。下面是具體程序和詳細注釋。
******************************
服務器程序
******************************
Option Explicit
定義常量
Const BUSY As Boolean = False
Const FREE As Boolean = True
定義連接狀態
Dim ConnectState() As Boolean
Private Sub Form_Load()
ReDim Preserve ConnectState(0 To 1)
On Error Resume Next
ConnectState(0) = FREE
ConnectState(1) = FREE
’指定網絡端口號
Listener.LocalPort = 1011
‘開始偵聽
Listener.Listen
End Sub
Private Sub Listener_ConnectionRequest(ByVal requestID As Long)
Dim SockIndex As Integer
Dim SockNum As Integer
On Error Resume Next
Form1.Print requestID & "連接請求"
查找連接的用戶數
SockNum = UBound(ConnectState)
If SockNum > 14 Then
Form1.Print SockIndex & ""
Exit Sub
End If
查找空閑的sock
SockIndex = FindFreeSocket()
’如果已有的sock都忙,而且sock數不超過15個,動態添加sock
If SockIndex > SockNum Then
Load Sock(SockIndex)
End If
ConnectState(SockIndex) = BUSY
Sock(SockIndex).Tag = SockIndex
接受請求
Sock(SockIndex).Accept (requestID)
Form1.Print SockIndex & "接受請求"
End Sub

客戶斷開,關閉相應的sock
Private Sub Sock_Close(Index As Integer)
If Sock(Index).State <> sckClosed Then
Sock(Index).Close
End If
ConnectState(Index) = FREE
Form1.Print Index & "close"
End Sub

接收數據
Private Sub Sock_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim dx As Double
Form1.Print "數據來自" & Index
Sock(Index).GetData dx, vbDouble
Form1.Print "dx=" & dx
End Sub

尋找空閑的sock
Public Function FindFreeSocket()
Dim SockCount, i As Integer
SockCount = UBound(ConnectState)
For i = 0 To SockCount
If ConnectState(i) = FREE Then
FindFreeSocket = i
Exit Function
End Ifs
Next i
ReDim Preserve ConnectState(0 To SockCount + 1)
FindFreeSocket = UBound(ConnectState)
End Function

***************************
客戶程序
’***************************
Option Explicit
發送數據
Private Sub command1_Click()
Dim dx As Double
dx = 23.9
sock.SendData dx
MsgBox ("data sended")
End Sub

Private Sub Form_Load()
遠程主機名
sock.RemoteHost = "media2"
網絡端口
sock.RemotePort = 1011
發出連接命令
sock.Connect
Command1.Enabled = False
End Sub

服務器關閉
Private Sub sock_Close()
MsgBox ("socket closed")
End Sub

連接成功
Private Sub sock_Connect()
MsgBox ("socket connected")
Command1.Enabled = True
End Sub

該文章在 2013/12/10 22:12:03 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved