版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Socket編程原理編程原理什么是SocketSocket接口是TCPIP網(wǎng)絡(luò)的API,Socket接口定義了許多函數(shù)或例程,程序員可以用它們來開發(fā)TCPIP網(wǎng)絡(luò)上的應(yīng)用程序。要學(xué)Inter上的TCPIP網(wǎng)絡(luò)編程,必須理解Socket接口。Socket接口設(shè)計者最先是將接口放在Unix操作系統(tǒng)里面的。如果了解Unix系統(tǒng)的輸入和輸出的話,就很容易了解Socket了。網(wǎng)絡(luò)的Socket數(shù)據(jù)傳輸是一種特殊的IO,Socket也是一種文件描述
2、符。Socket也具有一個類似于打開文件的函數(shù)調(diào)用Socket(),該函數(shù)返回一個整型的Socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^該Socket實(shí)現(xiàn)的。常用的Socket類型有兩種:流式Socket(SOCK_STREAM)和數(shù)據(jù)報式Socket(SOCK_DGRAM)。流式是一種面向連接的Socket,針對于面向連接的TCP服務(wù)應(yīng)用;數(shù)據(jù)報式Socket是一種無連接的Socket,對應(yīng)于無連接的UDP服務(wù)應(yīng)用。Sock
3、et建立為了建立Socket,程序可以調(diào)用Socket函數(shù),該函數(shù)返回一個類似于文件描述符的句柄。socket函數(shù)原型為:intsocket(intdomaininttypeintprotocol)domain指明所使用的協(xié)議族,通常為PF_I,表示互聯(lián)網(wǎng)協(xié)議族(TCPIP協(xié)議族);type參數(shù)指定socket的類型:SOCK_STREAM或SOCK_DGRAM,Socket接口還定義了原始Socket(SOCK_RAW),允許程序使用
4、低層協(xié)議;protocol通常賦值“0“。Socket()調(diào)用返回一個整型socket描述符,你可以在后面的調(diào)用使用它。Socket描述符是一個指向內(nèi)部數(shù)據(jù)結(jié)構(gòu)的指針,它指向描述符表入口。調(diào)用Socket函數(shù)時,socket執(zhí)行體將建立一個Socket,實(shí)際上“建立一個Socket“意味著為一個Socket數(shù)據(jù)結(jié)構(gòu)分配存儲空間。Socket執(zhí)行體為你管理描述符表。兩個網(wǎng)絡(luò)程序之間的一個網(wǎng)絡(luò)連接包括五種信息:通信協(xié)議、本地協(xié)議地址、本地主
5、機(jī)端口、遠(yuǎn)端主機(jī)地址和遠(yuǎn)端協(xié)議端口。Socket數(shù)據(jù)結(jié)構(gòu)中包含這五種信息。Socket配置通過socket調(diào)用返回一個socket描述符后,在使用socket進(jìn)行網(wǎng)絡(luò)傳輸以前,必須配置該socket。面向連接的socket客戶端通過調(diào)用Connect函數(shù)在socket數(shù)據(jù)結(jié)構(gòu)中保存本地和遠(yuǎn)端信息。無連接socket的客戶端和服務(wù)端以及面向連接socket的服務(wù)端通過調(diào)用bind函數(shù)來配置本地信息。Bind函數(shù)將socket與本機(jī)上的一個
6、端口相關(guān)聯(lián),隨后你就可以在該端口監(jiān)聽服務(wù)請求。Bind函數(shù)原型為:intbind(intsockfdstructsockaddrmy_addrintaddrlen)Sockfd是調(diào)用socket函數(shù)返回的socket描述符my_addr是一個指向包含有本機(jī)IP地址及端口號等信息的sockaddr類型的指針;addrlen常被設(shè)置為sizeof(structsockaddr)。structsockaddr結(jié)構(gòu)類型是用來保存socket信息
7、的:structsockaddrunsignedshtsa_family地址族,AF_xxxsa_data[14]14字節(jié)的協(xié)議地址sa_family一般為AF_I,代表Inter(TCPIP)地址族;sa_data則包含該socket的IP地址和端口號。Listen函數(shù)使socket處于被動的監(jiān)聽模式,并為該socket建立一個輸入數(shù)據(jù)隊列,將到達(dá)的服務(wù)請求保存在此隊列中,直到程序處理它們。intlisten(intsockfd,in
8、tbacklog)Sockfd是Socket系統(tǒng)調(diào)用返回的socket描述符;backlog指定在請求隊列中允許的最大請求數(shù),進(jìn)入的連接請求將在隊列中等待accept()它們(參考下文)。Backlog對隊列中等待服務(wù)的請求的數(shù)目進(jìn)行了限制,大多數(shù)系統(tǒng)缺省值為20。如果一個服務(wù)請求到來時,輸入隊列已滿,該socket將拒絕連接請求,客戶將收到一個出錯信息。當(dāng)出現(xiàn)錯誤時listen函數(shù)返回1,并置相應(yīng)的errno錯誤碼。accept()函
9、數(shù)讓服務(wù)器接收客戶的連接請求。在建立好輸入隊列后,服務(wù)器就調(diào)用accept函數(shù),然后睡眠并等待客戶的連接請求。intaccept(intsockfdvoidaddrintaddrlen)sockfd是被監(jiān)聽的socket描述符,addr通常是一個指向sockaddr_in變量的指針,該變量用來存放提出連接請求服務(wù)的主機(jī)的信息(某臺主機(jī)從某個端口發(fā)出該請求);addrten通常為一個指向值為sizeof(structsockaddr_in
10、)的整型指針變量。出現(xiàn)錯誤時accept函數(shù)返回1并置相應(yīng)的errno值。首先,當(dāng)accept函數(shù)監(jiān)視的socket收到連接請求時,socket執(zhí)行體將建立一個新的socket,執(zhí)行體將這個新socket和請求連接進(jìn)程的地址聯(lián)系起來,收到服務(wù)請求的初始socket仍可以繼續(xù)在以前的socket上監(jiān)聽,同時可以在新的socket描述符上進(jìn)行數(shù)據(jù)傳輸操作。數(shù)據(jù)傳輸Send()和recv()這兩個函數(shù)用于面向連接的socket上進(jìn)行數(shù)據(jù)傳輸。
11、Send()函數(shù)原型為:intsend(intsockfdconstvoidmsgintlenintflags)Sockfd是你想用來傳輸數(shù)據(jù)的socket描述符;msg是一個指向要發(fā)送數(shù)據(jù)的指針;Len是以字節(jié)為單位的數(shù)據(jù)的長度;flags一般情況下置為0(關(guān)于該參數(shù)的用法可參照man手冊)。Send()函數(shù)返回實(shí)際上發(fā)送出的字節(jié)數(shù),可能會少于你希望發(fā)送的數(shù)據(jù)。在程序中應(yīng)該將send()的返回值與欲發(fā)送的字節(jié)數(shù)進(jìn)行比較。當(dāng)send()
12、返回值與len不匹配時,應(yīng)該對這種情況進(jìn)行處理。msg=“Hello!“intlenbytes_sent……len=strlen(msg)bytes_sent=send(sockfdmsglen0)……recv()函數(shù)原型為:intrecv(intsockfdvoidbufintlenunsignedintflags)Sockfd是接受數(shù)據(jù)的socket描述符;buf是存放接收數(shù)據(jù)的緩沖區(qū);len是緩沖的長度。Flags也被置為0。Re
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java android socket編程
- 談?wù)刬os網(wǎng)絡(luò)編程之socket編程技術(shù)及應(yīng)用
- linux下面socket編程的非阻塞tcp研究
- 外文翻譯--socket網(wǎng)絡(luò)編程的設(shè)計與實(shí)現(xiàn)
- 外文翻譯--socket網(wǎng)絡(luò)編程的設(shè)計與實(shí)現(xiàn)
- java基于socket網(wǎng)絡(luò)編程的超市收銀管理系統(tǒng)
- 基于c#的socket編程的tcp異步實(shí)現(xiàn)
- 外文翻譯--socket網(wǎng)絡(luò)編程的設(shè)計與實(shí)現(xiàn)(中文)
- 外文翻譯--socket網(wǎng)絡(luò)編程的設(shè)計與實(shí)現(xiàn)(英文)
- socket網(wǎng)絡(luò)編程linux下實(shí)現(xiàn)聊天室費(fèi)下載
- 網(wǎng)絡(luò)編程課程設(shè)計報告-android_socket_聊天室
- 外文翻譯--Socket網(wǎng)絡(luò)編程的設(shè)計與實(shí)現(xiàn)(有word版).pdf
- 基于linux的socket網(wǎng)絡(luò)編程聊天工具課程設(shè)計
- 數(shù)據(jù)庫畢業(yè)設(shè)計外文翻譯--基于socket的網(wǎng)絡(luò)編程
- 外文翻譯--Socket網(wǎng)絡(luò)編程的設(shè)計與實(shí)現(xiàn)(有word版).pdf
- 畢業(yè)設(shè)計 計算機(jī)專業(yè)外文翻譯--基于socket的網(wǎng)絡(luò)編程
- socket編程實(shí)現(xiàn)局域網(wǎng)計算機(jī)監(jiān)控管理分析
- 線切割原理及編程
- socket通信外文翻譯---數(shù)據(jù)通信實(shí)驗(yàn)中的套接字編程
- socket 通信過程及流程
評論
0/150
提交評論