C++网络socket编程指南.ppt
《C++网络socket编程指南.ppt》由会员分享,可在线阅读,更多相关《C++网络socket编程指南.ppt(35页珍藏版)》请在三一办公上搜索。
1、Socket,使用Win32 API,一個網路通訊程式,什麼是Socket,凡是網路兩端互相連線傳送資料時的溝通介面就是socket,是一個網路系統的通訊函式庫,在任何作業系統中可以通用主要的5大函式:socket()電話bind()線路(第幾分機?)listen()準備好接聽(啟用鈴聲)connect()撥電話出去accept()對方接聽,Socket函式,指定通訊協定,socket()函式,int SOCKET socket(int af,int type,int protocol);af:位址資料族系(family),用不同方式表示網路位址type:通訊方式Protocal:傳輸協定編號
2、回傳值:-1表示建立socket發生錯誤 若成功則回傳非負整數,稱為socket descriptor(socket描述子),選項設定,af:選擇AF_INET Internet address family對應的網路位址資料格式是unsigned long(無號長整數)type:SOCK_STREAM 虛擬路徑連接方式(TCP用)SOCK_DGRAM 資料包方傳遞式(UDP用)protocal:選擇IPPROTO_TCP(TCP通訊協定)或寫入0,交由系統設定,範例,SOCKET sock;/宣告sock=socket(/設定AF_INET,SOCK_STREAM,IPPROTO_TCP);
3、,Bind函式,指定本地端位置,Bind()函式,int bind(SOCKET s,const struct sockaddr*name,int namelen);s:指定好通訊協定的socket name:指定本地端位址,資料格式為sockaddrnamelen:name之資料長度(單位byte)回傳值:-1表錯誤,否則為0,Sockaddr_in 格式(IPv4用),struct sockaddr_in short sin_family;u_short sin_port;struct in_addr sin_addr;char sin_zero8;sin_family:位址資料族系,同樣
4、設定為AF_INETsin_port:主機開啟的通訊埠號 用htons()寫入sin_addr:主機IP位址 in_addr資料格式sin_zero8:目前沒用處,保留以後使用,in_addr格式,typedef struct in_addr union struct u_char s_b1,s_b2,s_b3,s_b4;S_un_b;struct u_short s_w1,s_w2;S_un_w;u_long S_addr;S_un;in_addr;使用了union的結構體,實際上的大小是一個32bit的長整數所以只要注意u_long S_addr這個變數 將IP對此變數寫入便可函式庫引入的
5、標頭檔應該會有定義#define s_addr S_un.s_addr此後只要對前一頁之變數sin_addr.s_addr存取便可寫入時使用inet_addr(“IP位址字串”)轉換成unsigned long,範例,SOCKET Sock;sockaddr_in saServer;Sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);/設定本機通訊用的位址saServer.sin_family=AF_INET;saServer.sin_port=htons(5150);/啟用5150 port=inet_addr(“140.115.65.30”);/設定本
6、機IP/呼叫Bind函式 bind(Sock,(SOCKADDR*),Listen函式 設定socket等待外部連線,listen()是使Socket進入等待連線狀態,等待客戶端(Client)連上線來,很顯然的呼叫此函式的主機,功能會是一台伺服器(Server)。如果有Client想要連過來,此時可以呼叫connect()來跟Server 連線。而Server接受後會建立新的socket和Client通訊,listen socket則繼續存在等待其他Client,直到關閉為止。,listen()函式,int listen(SOCKET s,int backlog);s:設定好bind(),並
7、且尚未連線的socketBacklog:等待Server接受連線前,同時最大連線數回傳值:-1表錯誤,否則為0,Accept函式 接受外部連線,Blocking Non-blocking,Accept()函式,SOCKET accept(SOCKET s,struct sockaddr*addr,int*addrlen);s:一個設定為listen狀態的socketsddr:Client端位址資訊,由函式自動產生填入addrlen:sddr長度,由函式自動產生回傳值:-1表示錯誤,否則傳回另一個包含Client端資訊的新socket descriptor,作為傳送資料用傳進accept()的l
8、isten socket本身並沒有辦法作資料的傳輸,所以必須透過accept()產生一個包含通訊協定、Server、Client資訊的新socket,利用他就可以進行資料的傳輸了,範例,ListenSocket 為一個bind()過且未連線的socket/設定socket為接聽外部連線用if(listen(ListenSocket,1)=SOCKET_ERROR)printf(Error listening on socket.n);/宣告一個用來和Client連線用的socket SOCKET AcceptSocket;/接受外部連線while(1)AcceptSocket=SOCKET_E
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 网络 socket 编程 指南

链接地址:https://www.31ppt.com/p-6154015.html