?? d068.bmp.txt
字號:
第3章Socket通信編程實例
3.1 套接字概述
套接字( Socket)最初是由加利福尼亞大學(xué)Berkeley分校為UNIX操作系統(tǒng)開發(fā)的網(wǎng)絡(luò)
通信接口,是為了將TCPfIP協(xié)議集成到UNIX系統(tǒng)中而形成的TCP/IP應(yīng)用程序接口(API)。
當為客戶機/服務(wù)器開發(fā)一個特殊的應(yīng)用程序時,可以在客戶機/服務(wù)器的兩端各申請一個
Socket,通過其來交換數(shù)據(jù)結(jié)構(gòu)或者數(shù)據(jù)包。因此,Socket是通信端點的一種抽象,它提供
了一種發(fā)送和接收數(shù)據(jù)的機制。
1991年,由Microsoft聯(lián)合其他幾家公司共同制定了一套Windows環(huán)境下的網(wǎng)絡(luò)編程
接口,使之成為Windows系統(tǒng)下標準、通用的TCP/IP編程接口,并使之類似于UNIX下的
Socket,以便能兼容以往Intemet下的產(chǎn)品。.1994年,它正式被制定為標準,被稱為Windows
Sockets規(guī)范,.又稱Winsock,并通過C語言的動態(tài)鏈接庫(dll文件)方式提供給用戶。現(xiàn)
在,Windows平臺下的Intemet軟件都是在Winsock的基礎(chǔ)上開發(fā)的。目前實際應(yīng)用中的
Mndows Sockets規(guī)范主要有1.1版和2.0版。最初Winsock l.1舨是專門為Intemet設(shè)計的,
故其只支持TCP/IP協(xié)議。現(xiàn)在的2.x版己經(jīng)不再僅限于Intemet和TCP/ IP協(xié)議。它通過提
供擴展的API編程接口,把自己的應(yīng)用范圍擴大到現(xiàn)存的和正在出現(xiàn)的各種網(wǎng)絡(luò)和協(xié)議,包
括.PSTN、ISDN、無線網(wǎng)、所有的局域網(wǎng)協(xié)議、異步傳輸模式Al'M等。
套接字是通信端點盼一種抽象,它提供了一種發(fā)送和接收數(shù)據(jù)的機制。Winsock提供了
兩種形式的Socket:數(shù)據(jù)報套接字一(Datagram Sockets)和流式套接字(Stream Sockets)。流
式(也稱面向連接方式)套接字采用的是TCP協(xié)議,它提供了雙向的、有序的、無重復(fù)并
且無記錄邊界的數(shù)據(jù)流服務(wù)。在這種方式下,兩個通信的應(yīng)用程序之間先要建立一種虛擬的
連接。流式套接字的特點是通信可靠,對數(shù)據(jù)有校驗和重發(fā)的機制,通常用來作數(shù)據(jù)文件的
傳輸,如ftp、telnet等,適合于大量數(shù)據(jù)的傳輸。數(shù)據(jù)報套接字采用的是UDP協(xié)議,它建
立在lP協(xié)議上,提供無連接數(shù)據(jù)報傳輸,支持雙向的數(shù)據(jù)流,但并不保證是可靠、有序、
無重復(fù)的。也就是說,一個從數(shù)據(jù)報套接字接收信息的進程有可能發(fā)現(xiàn)信息重復(fù)了,或者和
發(fā)出時的順序不同。數(shù)據(jù)撮文方式由于取消了重發(fā)校驗機制,能夠達到較高的通信速率,可
以用作一些對數(shù)據(jù)可靠性要求不高的通信,如實時的語音、圖像傳輸?shù)取? 選擇使用流式套接字還是使用數(shù)據(jù)報套接字,對通信效率影響較大。在編程中,流式套
接字與數(shù)據(jù)報套接字是有區(qū)別的。在流式套接字中,服務(wù)器首先啟動,通過調(diào)用socket0建
立一個套接字,然后調(diào)用bind()將該套接字和本地網(wǎng)絡(luò)地址聯(lián)系在一起,再調(diào)用listen()使套
接字做好偵聽的準備,并規(guī)定它的請求隊列的長度,之后就調(diào)用accept()來接收連接。客戶
在建立套接字后就可調(diào)用connect()和服務(wù)器建立連接。連接一旦建立,客戶機和服務(wù)器之間
就可以調(diào)用receive()和send()來發(fā)送和接收數(shù)據(jù)。最后,當數(shù)據(jù)傳送結(jié)束后,雙方調(diào)用close()
關(guān)閉套接字,如圖3-1所示。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -