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

下載本文檔

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

文檔簡介

Linux套接字編程套接字是一種進程間通信的方法,不同于以往介紹的進程間通信方法的是,它并不局限于同一臺計算機的資源,除了可以在本地運行,還可以在網(wǎng)絡(luò)中運行。套接字接口〔socketinterface〕由伯克利版本UNIX引入,可以認(rèn)為是對管道概念的擴展——一臺機器上的進程可以使用套接字與另一臺機器上的進程通信。因此客戶與效勞器可以分散到網(wǎng)絡(luò)中。同一臺機器的進程間也可以用套接字通信。套接字概念

微軟的windows系統(tǒng)也通過可公開獲取的windowssocket技術(shù)標(biāo)準(zhǔn)實現(xiàn)了套接字接口,因此windows程序可以通過網(wǎng)絡(luò)和Linux/UNIX計算機進行通信,實現(xiàn)客戶/效勞器系統(tǒng),反之亦然。創(chuàng)立套接字#include<sys/types.h>#include<sys/socket.h>

返回套接字描述符intsocket(intdomain,inttype,intprotocol); domain:域 type:指定套接字的通信類型 protocol:指定使用的協(xié)議域〔Domain〕指定套接字通信中使用的網(wǎng)絡(luò)介質(zhì),包括地址格式。最常用的有以下兩種:AF_INET,即互聯(lián)網(wǎng)絡(luò),基于IP協(xié)議,并且每個效勞對應(yīng)一個端口號,套接字地址由IP地址+端口號決定;AF_UNIX,基于本地機器,底層協(xié)議使用文件輸入/輸出,地址為絕對路徑的文件名。類型〔Type〕流套接字:由類型SOCK_STREAM指定,基于TCP/IP實現(xiàn),提供一個有序、可靠、雙向字節(jié)流的連接,發(fā)送的數(shù)據(jù)不會喪失、亂序、重復(fù)。大的消息會被分塊、傳輸、重組,很像一個文件流。數(shù)據(jù)報套接字:由SOCK_DGRAM指定,基于UDP/IP協(xié)議,不建立和維持可靠連接,開銷小。協(xié)議〔protocol〕我們重點討論UNIX網(wǎng)絡(luò)套接字和文件系統(tǒng)套接字,不需要選擇特定協(xié)議,只要默認(rèn)值〔0〕即可。命名套接字#include<sys/socket.h>intbind(intsocket,conststructsockaddr*address,size_taddress_len);其中,socket是套接字的標(biāo)示符。address是套接字地址。address_len是地址長度。套接字地址AF_UNIX:地址格式由sockaddr_un來描述structsockaddr_un{ sa_family_tsun_family charsun_path[];}AF_INET:地址格式由sockaddr_in來指定structsockaddr_in{ shortintsin_family; unsignedshortintsin_port; structin_addrsin_addr;}四字節(jié)IP地址創(chuàng)立套接字隊列#include<sys/socket.h> Intlisten(intsocket,intbacklog); 套接字隊列中,等待處理的進入連接的個數(shù)最多不能超過backlog這個數(shù)字,多出的連接請求將被拒絕,導(dǎo)致客戶連接失敗。 當(dāng)效勞器正忙于處理一個客戶請求時,后續(xù)的客戶連接放入隊列等待處理。函數(shù)執(zhí)行成功返回0,失敗返回-1.接受連接#include<sys/socket.h> intaccept(intsocket,structsockaddr*address,size_t*address_len); 連接客戶的地址將被放入address參數(shù)指向的sockaddr結(jié)構(gòu)中。 address_len指定客戶結(jié)構(gòu)的長度,如果客戶地址的長度超出這個值將被截斷,所以必須先得到這個適宜的值。請求連接#include<sys/socket.h> intconnect(intsocket,structsockaddr*address,size_taddress_len); 參數(shù)socket指定的套接字將連接到參數(shù)address指定的效勞器套接字,address指向的結(jié)構(gòu)長度由參數(shù)address_len指定。關(guān)閉套接字 可以通過close函數(shù)終止效勞器和客戶上的套接字連接,操作過程與對文件描述符進行關(guān)閉一樣。

Server.c頭文件與變量聲明#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<sys/un.h>#include<unistd.h>#include<stdlib.h>intmain(){ intserver_sockfd,client_sockfd; intserver_len,client_len; structsockaddr_unserveraddress; structsockaddr_unclientaddress;Server.c刪除以前的套接字,為效勞器創(chuàng)立一個未命名的套接字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,(structsockaddr*)&server_address,server_len);Server.c創(chuàng)立一個連接隊列,開始等待客戶進行連接listen(server_sockfd,5);while(1){ charch; printf(“serverwaiting\n”);接受一個連接 client_len=sizeof(client_address); client_sockfd=accept(server_sockfd,(structsockaddr*)&client_address,&client_len);Server.c對客戶進行讀寫操作 read(client_sockfd,&ch,1); ch++; write(client_sockfd,&ch,1); close(client_sockfd);}}Client.c頭文件與變量聲明#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<sys/un.h>#include<unistd.h>#include<stdlib.h>intmain(){ intsockfd; intlen; structsockaddr_unaddress; charch=‘A’;Client.c為客戶創(chuàng)立一個套接字 sockfd=socket(AF_UNIX,SOCK_STREAM,0);根據(jù)效勞器的情況對套接字命名 address.sun_family=AF_UNIX; strcpy(address.sun_puth,”server_socket”); len=sizeof(address);將客戶端套接字連接到效勞器端套接字 connect(sockfd,(structsockaddr*)&address,len);Client.c通過sockfd進行讀寫操作 write(sockfd,&ch,1); read(sockfd,&ch,1); printf(“

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論