最新C++网络socket编程指南PPT课件.ppt

最新C++网络socket编程指南PPT课件.ppt

ID:62066508

大小:419.50 KB

页数:58页

时间:2021-04-14

最新C++网络socket编程指南PPT课件.ppt_第1页
最新C++网络socket编程指南PPT课件.ppt_第2页
最新C++网络socket编程指南PPT课件.ppt_第3页
最新C++网络socket编程指南PPT课件.ppt_第4页
最新C++网络socket编程指南PPT课件.ppt_第5页
资源描述:

《最新C++网络socket编程指南PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C++网络socket编程指南一個網路通訊程式什麼是Socket凡是網路兩端互相連線傳送資料時的溝通介面就是socket,是一個網路系統的通訊函式庫,在任何作業系統中可以通用主要的5大函式:socket()電話bind()線路(第幾分機?)listen()準備好接聽(啟用鈴聲)connect()撥電話出去accept()對方接聽範例SOCKETsock;//宣告sock=socket(//設定AF_INET,SOCK_STREAM,IPPROTO_TCP);Bind函式,指定本地端位置Bind()函式intbind(SOCKETs,conststructsocka

2、ddr*name,intnamelen);s:指定好通訊協定的socketname:指定本地端位址,資料格式為sockaddrnamelen:name之資料長度(單位byte)回傳值:-1表錯誤,否則為0Sockaddr_in格式(IPv4用)structsockaddr_in{ shortsin_family; u_shortsin_port;structin_addrsin_addr;charsin_zero[8];};sin_family:位址資料族系,同樣設定為AF_INETsin_port:主機開啟的通訊埠號用htons()寫入sin_addr:主機IP位址in_

3、addr資料格式sin_zero[8]:目前沒用處,保留以後使用in_addr格式typedefstructin_addr{ union{struct{u_chars_b1,s_b2,s_b3,s_b4;}S_un_b; struct{u_shorts_w1,s_w2;}S_un_w; u_longS_addr; }S_un;}in_addr;使用了union的結構體,實際上的大小是一個32bit的長整數所以只要注意u_longS_addr這個變數將IP對此變數寫入便可函式庫引入的標頭檔應該會有定義#defines_addrS_un.s_addr此後只要對前一頁之變數sin

4、_addr.s_addr存取便可寫入時使用inet_addr(“IP位址字串”)轉換成unsignedlong範例SOCKETSock;sockaddr_insaServer;Sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//設定本機通訊用的位址saServer.sin_family=AF_INET;saServer.sin_port=htons(5150);//啟用5150portsaServer.sin_addr.s_addr=inet_addr(“140.115.65.30”);//設定本機IP//呼叫Bind函式bind(

5、Sock,(SOCKADDR*)&saServer,sizeof(saServer));Listen函式設定socket等待外部連線listen()是使Socket進入等待連線狀態,等待客戶端(Client)連上線來,很顯然的呼叫此函式的主機,功能會是一台伺服器(Server)。如果有Client想要連過來,此時可以呼叫connect()來跟Server連線。而Server接受後會建立新的socket和Client通訊,listensocket則繼續存在等待其他Client,直到關閉為止。listen()函式intlisten(SOCKETs,intbacklog);s:設

6、定好bind(),並且尚未連線的socketBacklog:等待Server接受連線前,同時最大連線數回傳值:-1表錯誤,否則為0Accept函式接受外部連線BlockingNon-blockingAccept()函式SOCKETaccept(SOCKETs,structsockaddr*addr,int*addrlen);s:一個設定為listen狀態的socketsddr:Client端位址資訊,由函式自動產生填入addrlen:sddr長度,由函式自動產生回傳值:-1表示錯誤,否則傳回另一個包含Client端資訊的新socketdescriptor,作為傳送資料用傳進

7、accept()的listensocket本身並沒有辦法作資料的傳輸,所以必須透過accept()產生一個包含通訊協定、Server、Client資訊的新socket,利用他就可以進行資料的傳輸了範例ListenSocket為一個bind()過且未連線的socket//設定socket為接聽外部連線用if(listen(ListenSocket,1)==SOCKET_ERROR)printf("Errorlisteningonsocket.");//宣告一個用來和Client連線用的socketSOCKETAc

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。