Linux下套接字編程.ppt_第1頁(yè)
Linux下套接字編程.ppt_第2頁(yè)
Linux下套接字編程.ppt_第3頁(yè)
Linux下套接字編程.ppt_第4頁(yè)
Linux下套接字編程.ppt_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Linux套接字編程,套接字是一種進(jìn)程間通信的方法,不同于以往介紹的進(jìn)程間通信方法的是,它并不局限于同一臺(tái)計(jì)算機(jī)的資源,除了可以在本地運(yùn)行,還可以在網(wǎng)絡(luò)中運(yùn)行。 套接字接口(socket interface)由伯克利版本UNIX引入,可以認(rèn)為是對(duì)管道概念的擴(kuò)展一臺(tái)機(jī)器上的進(jìn)程可以使用套接字與另一臺(tái)機(jī)器上的進(jìn)程通信。因此客戶與服務(wù)器可以分散到網(wǎng)絡(luò)中。 同一臺(tái)機(jī)器的進(jìn)程間也可以用套接字通信。,套接字概念,微軟的windows系統(tǒng)也通過(guò)可公開(kāi)獲取的windows socket技術(shù)規(guī)范實(shí)現(xiàn)了套接字接口,因此windows程序可以通過(guò)網(wǎng)絡(luò)和Linux/UNIX計(jì)算機(jī)進(jìn)行通信,實(shí)現(xiàn)客戶/服務(wù)器系統(tǒng),反之亦然。,創(chuàng)建套接字,#include #include 返回套接字描述符 int socket( int domain, int type, int protocol); domain:域 type:指定套接字的通信類型 protocol:指定使用的協(xié)議,域(Domain),指定套接字通信中使用的網(wǎng)絡(luò)介質(zhì),包括地址格式。最常用的有以下兩種: AF_INET,即互聯(lián)網(wǎng)絡(luò),基于IP協(xié)議,并且每個(gè)服務(wù)對(duì)應(yīng)一個(gè)端口號(hào),套接字地址由IP地址+端口號(hào)決定; AF_UNIX,基于本地機(jī)器,底層協(xié)議使用文件輸入/輸出,地址為絕對(duì)路徑的文件名。,類型(Type),流套接字:由類型SOCK_STREAM指定,基于TCP/IP實(shí)現(xiàn),提供一個(gè)有序、可靠、雙向字節(jié)流的連接,發(fā)送的數(shù)據(jù)不會(huì)丟失、亂序、重復(fù)。大的消息會(huì)被分塊、傳輸、重組,很像一個(gè)文件流。 數(shù)據(jù)報(bào)套接字:由SOCK_DGRAM指定,基于UDP/IP協(xié)議,不建立和維持可靠連接,開(kāi)銷小。,協(xié)議(protocol),我們重點(diǎn)討論UNIX網(wǎng)絡(luò)套接字和文件系統(tǒng)套接字,不需要選擇特定協(xié)議,只要默認(rèn)值(0)即可。,命名套接字,#include int bind( int socket, const struct sockaddr* address, size_t address_len); 其中,socket是套接字的標(biāo)示符。address是套接字地址。address_len是地址長(zhǎng)度。,套接字地址,AF_UNIX:地址格式由sockaddr_un來(lái)描述 struct sockaddr_un sa_family_t sun_family char sun_path; AF_INET:地址格式由sockaddr_in來(lái)指定 struct sockaddr_in short int sin_family; unsigned short intsin_port; structin_addrsin_addr; ,四字節(jié)IP地址,創(chuàng)建套接字隊(duì)列,#include Int listen( int socket, int backlog); 套接字隊(duì)列中,等待處理的進(jìn)入連接的個(gè)數(shù)最多不能超過(guò)backlog這個(gè)數(shù)字,多出的連接請(qǐng)求將被拒絕,導(dǎo)致客戶連接失敗。 當(dāng)服務(wù)器正忙于處理一個(gè)客戶請(qǐng)求時(shí),后續(xù)的客戶連接放入隊(duì)列等待處理。函數(shù)執(zhí)行成功返回0,失敗返回-1.,接受連接,#include int accept( int socket, struct sockaddr* address, size_t* address_len); 連接客戶的地址將被放入address參數(shù)指向的sockaddr結(jié)構(gòu)中。 address_len指定客戶結(jié)構(gòu)的長(zhǎng)度,如果客戶地址的長(zhǎng)度超出這個(gè)值將被截?cái)?,所以必須先得到這個(gè)合適的值。,請(qǐng)求連接,#include int connect( int socket, struct sockaddr* address, size_t address_len); 參數(shù)socket指定的套接字將連接到參數(shù)address指定的服務(wù)器套接字,address指向的結(jié)構(gòu)長(zhǎng)度由參數(shù)address_len指定。,關(guān)閉套接字,可以通過(guò)close函數(shù)終止服務(wù)器和客戶上的套接字連接,操作過(guò)程與對(duì)文件描述符進(jìn)行關(guān)閉一樣。,Server.c,頭文件與變量聲明 #include #include #include #include #include #include int main() int server_sockfd,client_sockfd; int server_len,client_len; struct sockaddr_un server address; struct sockaddr_un client address;,Server.c,刪除以前的套接字,為服務(wù)器創(chuàng)建一個(gè)未命名的套接字 unlink(“server_socket”); server_sockfd=socket(AF_UNIX,SOCK_STREAM,0); 命名套接字 server_address.sun_family = AF_UNIX; strcpy(server_address.sun_path,”server_socket”); server_len=sizeof(server_address); bind(server_sockfd,(struct sockaddr *),Server.c,創(chuàng)建一個(gè)連接隊(duì)列,開(kāi)始等待客戶進(jìn)行連接 listen(server_sockfd,5); while(1) char ch; printf(“server waitingn”); 接受一個(gè)連接 client_len=sizeof(client_address); client_sockfd=accept(server_sockfd,(struct sockaddr *),Server.c,對(duì)客戶進(jìn)行讀寫(xiě)操作 read(client_sockfd, ,Client.c,頭文件與變量聲明 #include #include #include #include #include #include int main() int sockfd; int len; struct sockaddr_un address; char ch=A;,Client.c,為客戶創(chuàng)建一個(gè)套接字 sockfd=socket(AF_UNIX,SOCK_STREAM,0); 根據(jù)服務(wù)器的情況對(duì)套接字命名 address.sun_family=AF_UNIX; strcpy(address.sun_puth,”server_socket”); len=sizeof(address); 將客戶端套接字連接到服務(wù)器端套接字 connect(sockfd,(struct sockaddr*),Client.c,通過(guò)so

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論