編寫網路尋呼機 (轉)
編寫尋呼機 作者:嶽兵 提起ICQ的大名,愛好的朋友一定不會感到陌生的吧?ICQ就是網際網路上的尋呼機,無論什麼時候,只要你的朋友線上,
你只需在ICQ中輸入他的ID號碼,你就可以在網際網路上呼到他。ICQ由於其方便、快捷,且擁有眾多的註冊而一舉成為網際網路上最流行的網路尋呼機,
它幾乎成為每一個上網使用者的必備之物。當你在使用ICQ的時候,是否會想過自己動手編寫一個網路尋呼機呢?這其實在VB中就可以實現。 網路尋呼的原理就是當客戶端連線時,透過伺服器搜尋所要呼叫的ID號碼,如果檢測到此使用者且該使用者正處於聯網狀態,
則伺服器通知此使用者的客戶端程式響應主叫方客戶端程式,然後在主叫方和被叫方建立連線後,雙方就可以或進行其它的通訊。 在VB中編寫網路尋呼機需要建立兩個程式,一個為客戶端程式Client,一個為伺服器端程式Server。 一、在Client工程中建立一個窗體,載入WinSock,稱為tcpClient,選擇TCP。再加入四個文字框,
用以輸入伺服器的、伺服器埠號,被呼叫的網路尋呼ID號以及使用者登入ID號。然後再在窗體中加入三個按鈕,
分別命名為“連線”、“斷開”和“退出”,點選“連線”按鈕,並進行如下初始化連線,程式碼如下: Private Sub Command1_Click() If Len(Text1.Text) = 0 And Len(Text2.Text) = 0 Then MsgBox ("請輸入主機名或主機IP地址。") Exit Sub ElseIf Len(Text1.Text) > 0 Then tcpClient.RemoteHost = Text1.Text tcpClient.RemotePort = Text2.Text End If tcpClient.Connect Timer1.Enabled = True End Sub Private Sub Command2_Click() tcpClient.Close '斷開連線 End Sub Private Sub Command3_Click() End End Sub Private Sub Form_Load() Text2.Text = "1001" End Sub Private Sub tcpClient_Connect() tcpClient.SendData (Text3.Text&"@"&Text4.Text) End Sub Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long) Dim strData As String tcpClient.GetData strData strData = strData + "呼叫" '在收到呼叫訊息後彈出一對話方塊並顯示主叫方ID號碼 MsgBox (strData) End Sub 二、在伺服器端Server工程中也建立一個窗體,載入WinSock控制元件,
稱為tcpServer,協議選擇TCP,設定其Index值為0,並在工程中新增模組。內容如下: Private Type ActiveUser ClientAs String '記錄客戶的IP地址 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-990132/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用VB編寫網路尋呼機(1) (轉)
- 用VB編寫網路尋呼機(2) (轉)
- Linux網路驅動程式編寫(四)(轉)Linux
- Linux網路驅動程式編寫(三)(轉)Linux
- Linux網路驅動程式編寫(二)(轉)Linux
- Linux網路驅動程式編寫(一)(轉)Linux
- 網際網路十年亂像 網民驚呼“駭客超人”(轉)
- 理解 TCP/IP 網路棧 & 編寫網路應用TCP
- 《用Python寫網路爬蟲》--編寫第一個網路爬蟲Python爬蟲
- 網路安全專家呼籲川普政府建立民用網路DARPA
- 網路爬蟲編寫常見問題爬蟲
- 使用 Kotlin DSL 編寫網路爬蟲Kotlin爬蟲
- php編寫大型網站問題集 (轉)PHP網站
- ASP編寫完整的一個IP所在地搜尋類 (轉)
- 用python語言編寫網路爬蟲Python爬蟲
- 用 Swift 編寫網路層單元測試Swift
- 非典、網路寫手、共享軟體、網路遊戲及其他 (轉)遊戲
- 蘋果被判決侵犯 1990s 年代的尋呼機專利蘋果
- Delphi編寫網路程式的安全措施 (轉)
- BAT呼籲建反網路“黑產”生態圈BAT
- scraping_編寫第一個網路爬蟲API爬蟲
- 泛企業搜尋PK網際網路搜尋
- 智慧編撰:使用神經網路協助編寫電子郵件神經網路
- 計算機網路習題解答(教材 計算機網路 謝希仁編著)3計算機網路
- 用好錄製宏、VBA幫助與網路搜尋(轉)
- 【計算機網路知識掃盲】05、計算機網路協議及網路模型(轉)計算機網路協議模型
- MarsEdit 4 for Mac 網路寫作部落格編輯軟體Mac
- Go 語言編寫輕量級網路庫,GrapeNetGo
- 利用Python的SocketServer框架編寫網路服務程式PythonServer框架
- 如何編寫一份好的網際網路校招簡歷
- 尋找頭緒:編寫可維護的 JavaScriptJavaScript
- 【計算機網路知識掃盲】03、計算機網路的功能(轉)計算機網路
- 【計算機網路知識掃盲】02、計算機網路的概念(轉)計算機網路
- 【計算機網路知識掃盲】04、計算機網路分類(轉)計算機網路
- 確保預言機網路安全運轉
- IT業呼喚專案經理人(轉)
- Mac網路寫作部落格編輯軟體——MarsEdit 4 for MacMac
- 愛奇藝網路協程編寫高併發應用實踐