用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用VB編寫網路尋呼機(1) (轉)
- 編寫網路尋呼機 (轉)
- 用VB編寫抽獎程式 (轉)
- 用VB編寫標準CGI程式 (轉)
- 用VB編寫COM+應用時碰到問題? (轉)
- 用VB編寫一個彈出選單類 (轉)
- 用VB編寫OPC客戶端訪問WINCC (轉)客戶端
- 一個用VB編寫的監控別人上網的軟體例子 (轉)
- 用VB編寫非同步多執行緒下載程式 (轉)非同步執行緒
- 理解 TCP/IP 網路棧 & 編寫網路應用TCP
- 利用VB編寫螢幕保護程式 (轉)
- 用VB編寫簡單的程式來清空文件選單 (轉)
- 《用Python寫網路爬蟲》--編寫第一個網路爬蟲Python爬蟲
- 用VB寫高效的影像處理程式 (轉)
- Linux網路驅動程式編寫(四)(轉)Linux
- Linux網路驅動程式編寫(三)(轉)Linux
- Linux網路驅動程式編寫(二)(轉)Linux
- Linux網路驅動程式編寫(一)(轉)Linux
- 用python語言編寫網路爬蟲Python爬蟲
- 用 Swift 編寫網路層單元測試Swift
- 用VB寫計算器
- 網際網路十年亂像 網民驚呼“駭客超人”(轉)
- 用Delphi編寫點對點傳檔案程式(2) (轉)
- 在VB.NET中尋找App (轉)APP
- VB讀寫ini檔案 (轉)
- 用Delphi編寫DelTree程式 (轉)
- 用Java編寫ASP元件 (轉)Java元件
- 用Excel編寫小遊戲 (轉)Excel遊戲
- Delphi使用VB編寫的ActiveX控制元件全攻略 (轉)控制元件
- 愛奇藝網路協程編寫高併發應用實踐
- xyz計算機等級考試系統(二級c) vb編寫計算機
- 用VC++編寫CGI程式 (轉)C++
- 編寫高效的MySQL應用(轉)MySql
- VB.net 編碼規範(也適用於C#) (轉)C#
- 用VB開發IE (轉)
- 用VB6讀寫資料庫中的圖片 (轉)資料庫
- 從零開始構建並編寫神經網路【學習筆記】[2/2]神經網路筆記
- 編寫優質無錯程式碼(2) (轉)