用VB編寫網路尋呼機(2) (轉)
二、在端Server工程中也建立一個窗體,載入WinSock,稱為tcpServer,選擇TCP,設定其Index值為0,並在工程中新增模組。
內容如下:
Private Type ActiveUser
ClientAs String ’記錄客戶的
ClientPort As Integer ’記錄當前會話的埠
ClientID As Long ’記錄客戶的ID號碼
ClientConnected As Boolean
’客戶連線狀態,True表示已連線,False表示沒有連線
End Type
Dim CurUser() As ActiveUser
Dim tcpIndex As Integer ’跟蹤當前建立連線數
在Form_Load事件中加入如下程式碼:
Private Sub Form_Load()
tcpServer(0).Protocol = sckTCPProtocol
tcpServer(0).LocalPort = 1001
’將 LocalPort 屬性設定為一個整數。
tcpServer(0).Listen ’然後 Listen 方法。
tcpIndex = 1
End Sub
準備應答客戶端的請求連線,使用ConnectionRequest事件來應答戶端程式的請求,程式碼如下:
Private Sub tcpServer_ConnectionRequest
(Index As Integer, ByVal requestID As Long)
Dim i As Integer
On Error GoTo ErrHandle
For i = 1 To tcpIndex ’選擇一個空閒埠
If CurUser(i).ClientConnected =
False And i < > tcpIndex Then
Load tcpServer(i)
tcpServer(i).LocalPort = CurUser(i).ClientPort - 1
tcpServer(i).Accept requestID
Exit For
ElseIf CurUser(i).ClientConnected = False Then
Load tcpServer(i)
tcpServer(i).LocalPort = Port
If tcpServer(i).State < > sckClosed Then
tcpServer(i).Close
End If
tcpServer(i).Accept requestID
Exit For
End If
Next
DoEvents
’測試連線是否成功
If tcpServer(i).State = sckConnected Then
If i = tcpIndex Then
’已經沒有可用埠,記錄客戶的IP地址和埠號
tcpIndex = tcpIndex + 1
Port = Port + 1
ReDim Preserve CurUser(tcpIndex)
CurUser(i).ClientIP = tcpServer(i).RemoteHostIP
CurUser(i).ClientConnected = True
CurUser(i).ClientPort = Port
CurUser(tcpIndex).ClientConnected = False
Else
CurUser(i).ClientIP = tcpServer(i).RemoteHostIP
CurUser(i).ClientPort = Port
CurUser(i).ClientConnected = True
End If
End If
Exit Sub
ErrHandle:
Resume Next
’檢查控制元件的 State 屬性,如未關閉,在接受新的連線之前關閉此連線。
If tcpServer(0).State <> sckClosed Then
tcpServer(0).Close
tcpServer(0).Accept requestID
’接受具有 requestID 引數的,連線。
End Sub
Private Sub tcpServer_DataArrival(Index As Integer,
ByVal bytesTotal As Long)
Dim i As Integer
Dim s As String
Dim RequID As Long ’主叫方ID號碼
Dim SearchID As Long ’被叫方ID號碼
On Error GoTo ErrHandle
tcpServer(Index).GetData s, vbString
’接收資料並存入s
If Mid(s, i, 1) = "@" Then
’分離s中的主叫方和被叫方ID號碼
SearhID = Left(s, i - 1) ’把號存入mKey
RequID = Right(s, Len(s) - i) ’ID存入RequID
End If
’如果是請求尋呼某一ID號碼,則檢索當前此ID是否登入(即CurUser陣列中是否存在此使用者),然後傳送資訊,通知此使用者響應呼叫並顯示主叫使用者ID號碼。
For i = 1 To tcpIndex
If RequID = CurUser(i).ClientID And CurUser(i)
.ClientConnected = True Then
tcpServer(i).SendData (SearhID)
End If
Next
Exit Sub
ErrHandle:
If Err.Number = sckBadState Then ’連線不正確
CurUser(i).ClientConnected = False
CurUser(i).ClientIP = ""
Unload tcpServer(i)
Resume Next
End If
End Sub
本程式僅提供了用 編寫尋呼的思路和主要部分的實現過程,至於主叫方和被叫方建立連線後的通訊並未擴充套件,讀者若有興趣,可在這方面加入具體的實現程式碼,就可以給本程式增加更多的功能,如實時,語音對話等。如果在伺服器程式檢索到被叫方時,分別通知兩者客戶端程式,使主叫方和被叫方直接利用IP地址進行連線,則兩者的連線速度將會有大幅度的提高。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988131/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用 Kotlin DSL 編寫網路爬蟲Kotlin爬蟲
- 從零開始構建並編寫神經網路【學習筆記】[2/2]神經網路筆記
- 網路爬蟲編寫常見問題爬蟲
- 愛奇藝網路協程編寫高併發應用實踐
- 計算機網路概述2計算機網路
- EAS:基於網路轉換的神經網路結構搜尋 | AAAI 2018神經網路AI
- 用PyTorch從零開始編寫DeepSeek-V2PyTorch
- 用開源搜尋引擎定製你的網際網路
- 用weexplus從0到1寫一個app(2)-頁面跳轉和文章列表及文章詳情的編寫APP
- 智慧編撰:使用神經網路協助編寫電子郵件神經網路
- 從零開始構建並編寫神經網路---Keras【學習筆記】[1/2]神經網路Keras筆記
- 用vim編寫markdown
- async-rdma:編寫高吞吐量、低延遲網路應用的Rust庫Rust
- MarsEdit 4 for Mac 網路寫作部落格編輯軟體Mac
- Win10 20H1/20H2搜尋框如何禁用網路搜尋 Win10 20H1/20H2搜尋框禁用網路搜尋的步驟Win10
- 計算機網路 王道論壇2計算機網路
- 計算機網路小白學習-2計算機網路
- Exhibeo 2 for Mac(網路相簿應用程式)Mac
- 如何編寫一份好的網際網路校招簡歷
- 確保預言機網路安全運轉
- 計算機網路--應用層計算機網路
- 虛擬機器網路啟用虛擬機
- 計算機網路 - 應用層計算機網路
- 計算機網路 -- 應用層計算機網路
- Go 編寫 Web 應用GoWeb
- 用PHP編寫Android應用程式PHPAndroid
- 七天用Go寫個docker(網路篇)GoDocker
- python-Flask編寫一個簡單的網路介面(2)--詳解(超基礎)介面傳參PythonFlask
- Mac網路寫作部落格編輯軟體——MarsEdit 4 for MacMac
- 尋找寫程式碼感覺(三)之使用 Spring Boot 編寫介面Spring Boot
- 網路攻防路2
- 實戰生成對抗網路[2]:生成手寫數字
- [譯] Swift 寫網路層:用面向協議的方式Swift協議
- Ace Editor 擴充套件編寫初步(轉)套件
- 機器語言編寫helloworld
- 用 Vue 編寫抽象元件Vue抽象元件
- 測試用例編寫方法
- 用 golang 寫一個語言(編譯器,虛擬機器)Golang編譯虛擬機
- C#/VB.NET 將RTF轉為HTMLC#HTML