Winsock程式設計框架

2021-04-17 08:52:29 字數 2678 閱讀 4489

microsoft的windows sockets api是windows下的網路應用程式介面,為了適用於

windows下的訊息機制和非同步的i/o選擇操作,windows sockets api在功能上擴充了將近

20個函式,其中擴充的部分均冠以字首wsa(windows sockets asynchronous),如

wsastartup、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置為伺服器的名稱(ip位址或網路代號),

還應設定伺服器所監聽的相應服務的埠號(remoteport),如ftp服務在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程式。

隨著internet的逐步興起,sockets程式設計必將成為流行的網路程式設計介面之一。也許您

會發問:iso的osi模型又是何等地位呢?筆者的觀點是:iso的osi模型必將成為網路應

用的統一介面,sockets介面的廣泛應用則為osi模型開拓了更廣泛的應用前景!

winsock程式設計

伺服器端 include include pragma comment lib,ws2 32.lib using namespace std void do service socket conn while 1 不斷接收客戶端傳送的資料 if lobyte wsadata.wversion 2 h...

winsock程式設計(一)

一 windows sockets 背景知識 socket的定義。socket控制代碼型別的描述。socket的應用領域。windowssockets規範為windows定義了一套面向位元組相容的網路程式設計介面。windowssockets基於unix socket 伯克利軟體發行機構,bsd,r...

WINSOCK 程式設計要點

利用winsock程式設計由同步和非同步方式,同步方式邏輯清晰,程式設計專注於應用,在搶先式的多工作業系統中 winnt win2k 採用多執行緒方式效率基本達到非同步方式的水平,應此以下為同步方式程式設計要點。1 快速通訊 winsock的nagle演算法將降低小資料報的傳送速度,而系統預設是使用...