Winsock程式設計框架 (轉)
Winsock程式設計框架 (轉)[@more@]
的 Sockets 是Windows下的應用介面,為了適用於
Windows下的訊息機制和非同步的I/O選擇操作,Windows Sockets API在功能上擴充了將近
20個,其中擴充的部分均冠以字首WSA(Windows Sockets Asynchronous),如
Wtartup、WSAClean等,充分體現了Widnows的優越性。此外,Windows Sockets API有
16位版和32位版兩種,16位版是單程式的,32位版則提供了多執行緒下的保護。
Microsoft Visual Basic提供了用於Windows Sockets的可用——Winsock控
件。該控制元件為提供了訪問TCP和UDP網路的極其方便的途徑。並且適用於Microsoft
Access、Visual Basic、Visual C++和Visual FoxPro等多種視覺化環境。透過Winsock
控制元件編制C/S程式,程式設計師無須瞭解TCP或低階Winsock APIs實現的細節,如使用者無
須考慮網路位元組順序與本機字接順序便可直接進行資料的傳送。用該控制元件實現網間程式通訊
極其方便。
在TCP應用中,為了建立一個網路連線例項(Instance)的端,只需設定本地服
務埠號,然後伺服器呼叫方法Listen進入阻塞狀態,等待來自客戶的連線請求。與此對
應的客戶端不但要將Winsock的屬性RemoteHost置為伺服器的名稱(或網路代號),
還應設定伺服器所的相應服務的埠號(RemotePort),如服務在21號埠,HTTP
在81號埠等。然後呼叫方法Winsock.Connect向伺服器發出請求。伺服器接收到客戶請
求時,事件ConnectionRequest將被觸發。如伺服器願意提供服務,則可呼叫Accept方法
接受連線。
一旦連線建立,兩端均可使用SendData或GetData進行資料的傳送或接收。事件
DataArrival將在另一端資料準備就緒時被觸發。
UDP的實現與TCP不同的是,呼叫Sockets的兩端無需建立連線便可進行資料的傳
輸。因此,一個UDP應用可以同時擔任伺服器或客戶的角色。
以下程式程式碼為Visual Basic Windows Sockets程式設計的基本。
’伺服器方
Private Sub Command1.Click()
’設定本地服務埠號
Winsock1.localport=2048
’伺服器進入監聽狀態
Winsock1.listen
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
’收到客戶連線請求
’檢查Socket狀態
If Winsock1.State <> sckClosed Then Winsock1.Close
’接受客戶請求
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
’對方資料已準備好
’可用GetData()/SendData()接收/傳送資料
’處理客戶資料
……
End Sub
Private Sub Form_Unload(Cancel As Integer)
Winsock1.Close
End Sub
’客戶方
Private Sub Command1.Click()
’設定伺服器網路名
Winsock1.RemoteHost=“193.168.1.40”
’設定伺服器相應服務埠號
Winsock1.RemotePort=2048
’向伺服器發出連線請求
Winsock1.Connect
End Sub
Private Sub Winsock1_Connect()
’伺服器響應連線
’可以進行GetData()/SendData()進行資料傳輸
……
End Sub
Private Sub Form1.Unload()
Winsock1.Close
End Sub
該段程式演示了用Visual Basic建立TCP連線的基本過程。因本文重在講解Sockets
程式設計,故文中未涉及VB自己封裝的故障處理函式Winsock1.Erroe(),讀者可自行編制。以
上程式段可作為一般TCP應用的基本框架加以擴充套件使用。
Microsoft Visual C++實現過程與前述的VB實現類同。具體例項可見Microsoft
Visual C++ Samples中的chatsrv與chater程式。
隨著Inte的逐步興起,Sockets程式設計必將成為流行的網路程式設計介面之一。也許您
會發問:ISO的OSI模型又是何等地位呢?筆者的觀點是:ISO的OSI模型必將成為網路應
用的統一介面,Sockets介面的廣泛應用則為OSI模型開拓了更廣泛的應用前景!
的 Sockets 是Windows下的應用介面,為了適用於
Windows下的訊息機制和非同步的I/O選擇操作,Windows Sockets API在功能上擴充了將近
20個,其中擴充的部分均冠以字首WSA(Windows Sockets Asynchronous),如
Wtartup、WSAClean等,充分體現了Widnows的優越性。此外,Windows Sockets API有
16位版和32位版兩種,16位版是單程式的,32位版則提供了多執行緒下的保護。
Microsoft Visual Basic提供了用於Windows Sockets的可用——Winsock控
件。該控制元件為提供了訪問TCP和UDP網路的極其方便的途徑。並且適用於Microsoft
Access、Visual Basic、Visual C++和Visual FoxPro等多種視覺化環境。透過Winsock
控制元件編制C/S程式,程式設計師無須瞭解TCP或低階Winsock APIs實現的細節,如使用者無
須考慮網路位元組順序與本機字接順序便可直接進行資料的傳送。用該控制元件實現網間程式通訊
極其方便。
在TCP應用中,為了建立一個網路連線例項(Instance)的端,只需設定本地服
務埠號,然後伺服器呼叫方法Listen進入阻塞狀態,等待來自客戶的連線請求。與此對
應的客戶端不但要將Winsock的屬性RemoteHost置為伺服器的名稱(或網路代號),
還應設定伺服器所的相應服務的埠號(RemotePort),如服務在21號埠,HTTP
在81號埠等。然後呼叫方法Winsock.Connect向伺服器發出請求。伺服器接收到客戶請
求時,事件ConnectionRequest將被觸發。如伺服器願意提供服務,則可呼叫Accept方法
接受連線。
一旦連線建立,兩端均可使用SendData或GetData進行資料的傳送或接收。事件
DataArrival將在另一端資料準備就緒時被觸發。
UDP的實現與TCP不同的是,呼叫Sockets的兩端無需建立連線便可進行資料的傳
輸。因此,一個UDP應用可以同時擔任伺服器或客戶的角色。
以下程式程式碼為Visual Basic Windows Sockets程式設計的基本。
’伺服器方
Private Sub Command1.Click()
’設定本地服務埠號
Winsock1.localport=2048
’伺服器進入監聽狀態
Winsock1.listen
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
’收到客戶連線請求
’檢查Socket狀態
If Winsock1.State <> sckClosed Then Winsock1.Close
’接受客戶請求
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
’對方資料已準備好
’可用GetData()/SendData()接收/傳送資料
’處理客戶資料
……
End Sub
Private Sub Form_Unload(Cancel As Integer)
Winsock1.Close
End Sub
’客戶方
Private Sub Command1.Click()
’設定伺服器網路名
Winsock1.RemoteHost=“193.168.1.40”
’設定伺服器相應服務埠號
Winsock1.RemotePort=2048
’向伺服器發出連線請求
Winsock1.Connect
End Sub
Private Sub Winsock1_Connect()
’伺服器響應連線
’可以進行GetData()/SendData()進行資料傳輸
……
End Sub
Private Sub Form1.Unload()
Winsock1.Close
End Sub
該段程式演示了用Visual Basic建立TCP連線的基本過程。因本文重在講解Sockets
程式設計,故文中未涉及VB自己封裝的故障處理函式Winsock1.Erroe(),讀者可自行編制。以
上程式段可作為一般TCP應用的基本框架加以擴充套件使用。
Microsoft Visual C++實現過程與前述的VB實現類同。具體例項可見Microsoft
Visual C++ Samples中的chatsrv與chater程式。
隨著Inte的逐步興起,Sockets程式設計必將成為流行的網路程式設計介面之一。也許您
會發問:ISO的OSI模型又是何等地位呢?筆者的觀點是:ISO的OSI模型必將成為網路應
用的統一介面,Sockets介面的廣泛應用則為OSI模型開拓了更廣泛的應用前景!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990713/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 玩轉 PHP 網路程式設計全套之 libevent 框架首篇PHP程式設計框架
- 玩轉 PHP 網路程式設計全套之 libevent 框架之 httpServerPHP程式設計框架HTTPServer
- 【程式設計框架】Android可配置的ScrollView框架程式設計框架AndroidView
- 玩轉 PHP 網路程式設計全套之多程式程式設計PHP程式設計
- 玩轉 PHP 網路程式設計全套之 libevent 框架多人聊天應用PHP程式設計框架
- Java 併發程式設計 Executor 框架Java程式設計框架
- 轉轉基於MQ的分散式重試框架設計方案MQ分散式框架
- 【轉載】MapReduce程式設計 Intellij Idea配置MapReduce程式設計環境程式設計IntelliJIdea
- 玩轉 PHP 網路程式設計全套之 socket stream 程式設計PHP程式設計
- 合理使用CSS框架,加速UI設計程式CSS框架UI
- 程式設計師,請停止學習框架!程式設計師框架
- 半路轉行學程式設計還來得及嗎?半路轉行如何學程式設計?程式設計
- 程式設計師寫的跳轉程式設計師
- 玩轉 PHP 網路程式設計全套之中斷系統程式設計PHP程式設計
- 網路程式設計框架t-io的程式設計基本知識介紹程式設計框架
- 器材攝影師與框架程式設計師框架程式設計師
- 好程式設計師Java教程分享javaweb框架程式設計師JavaWeb框架
- HTML5前端程式設計常用的框架HTML前端程式設計框架
- WinSock 重疊IO模型模型
- NPDP|程式設計師轉產品經理好轉嗎?程式設計師
- MFC下CSocket程式設計詳解(轉)程式設計
- 反轉!BAT程式設計吸金榜來了,AI程式設計師刷爆了......BATAI程式設計師
- 1. 揭秘Spring型別轉換 - 框架設計的基石Spring型別框架
- RPC 框架設計RPC框架
- PHP高階程式設計:模式、框架與測試PHP程式設計模式框架
- 《java併發程式設計的藝術》Executor框架Java程式設計框架
- Aveva Marine VBNET 程式設計系列-搭建開發框架程式設計框架
- Python網路程式設計常用的框架有哪些?Python程式設計框架
- 好程式設計師java分享spring框架精講程式設計師JavaSpring框架
- Spring webflux 函數語言程式設計web框架SpringWebUX函數程式設計框架
- Google自動程式設計框架AutoML入門指南Go程式設計框架TOML
- 論讓程式設計師失業的Ying框架程式設計師框架
- Java程式設計師必備的工具和框架Java程式設計師框架
- Winsock2使用記錄
- 程式設計師為什麼焦慮於程式語言和框架?程式設計師框架
- JNPF低程式碼開發框架程式碼 生成器設計框架
- sql語句的程式設計手冊(轉)SQL程式設計
- 1. 揭祕Spring型別轉換 - 框架設計的基石Spring型別框架
- ET框架6.0分析二、非同步程式設計框架非同步程式設計