第八章 網(wǎng)絡(luò)程序設(shè)計(jì)_第1頁
第八章 網(wǎng)絡(luò)程序設(shè)計(jì)_第2頁
第八章 網(wǎng)絡(luò)程序設(shè)計(jì)_第3頁
第八章 網(wǎng)絡(luò)程序設(shè)計(jì)_第4頁
第八章 網(wǎng)絡(luò)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、版權(quán)所有1 第八章第八章 網(wǎng)絡(luò)程序設(shè)計(jì)網(wǎng)絡(luò)程序設(shè)計(jì) 在分布式應(yīng)用程序中,基于客戶端和服務(wù) 器的各種網(wǎng)絡(luò)編程序技術(shù)應(yīng)用非常廣泛。 C#對(duì)網(wǎng)絡(luò)程序設(shè)計(jì)提供了強(qiáng)大的支持, 在System.Net命名空間中包含了許多用 于網(wǎng)絡(luò)程序設(shè)計(jì)的類。 版權(quán)所有2 目錄 l 網(wǎng)絡(luò)程序設(shè)計(jì)基礎(chǔ) l 面向連接的套接字 l 面向無連接的套接字 版權(quán)所有3 8.1 網(wǎng)絡(luò)程序設(shè)計(jì)基礎(chǔ) System.Net命名空間為當(dāng)前網(wǎng)絡(luò)上使用的多種協(xié) 議提供了簡(jiǎn)單的編程接口。 8.1.1 網(wǎng)絡(luò)協(xié)議 網(wǎng)絡(luò)協(xié)議是網(wǎng)絡(luò)上計(jì)算機(jī)為交換數(shù)據(jù)所必須遵守 的通信規(guī)范和消息格式的集合。目前常用的網(wǎng)絡(luò) 協(xié)議有TCP協(xié)議和UDP協(xié)議。 版權(quán)所有4 1.TC

2、P協(xié)議協(xié)議 TCP是Tranfer Control Protocol的簡(jiǎn)稱,是一種 面向連接的保證可靠傳輸?shù)膮f(xié)議。通過TCP協(xié)議 傳輸,得到的是一個(gè)順序的無差錯(cuò)的數(shù)據(jù)流。發(fā) 送方和接收方的成對(duì)的兩個(gè)Socket之間必須建立 連接,以便在TCP協(xié)議的基礎(chǔ)上進(jìn)行通信,當(dāng)一 個(gè)Socket(通常都是Server Socket)等待建立連 接時(shí),另一個(gè)Socket可以請(qǐng)求連接,一旦這兩個(gè) Socket連接起來,它們就可以進(jìn)行雙向數(shù)據(jù)傳輸, 雙方都可以進(jìn)行發(fā)送或接收操作。 版權(quán)所有5 2.UDP協(xié)議協(xié)議 UDP是User Datagram Protocol的簡(jiǎn)稱,是一種無連接的 協(xié)議,每個(gè)數(shù)據(jù)報(bào)都是一個(gè)

3、獨(dú)立的信息,包括完整的源 地址或目的地址,它在網(wǎng)絡(luò)上以任何可能的路徑傳往目 的地,因此能否到達(dá)目的地,到達(dá)目的地的時(shí)間以及內(nèi) 容的正確性都是不能被保證的。 使用UDP時(shí),每個(gè)數(shù)據(jù)報(bào)中都給出了完整的地址信 息,因此無需要建立發(fā)送方和接收方的連接。使用TCP 協(xié)議,由于它是一個(gè)面向連接的協(xié)議,在Socket之間進(jìn) 行數(shù)據(jù)傳輸之前必然要建立連接,所以在TCP中多了一 個(gè)連接建立的時(shí)間。 版權(quán)所有6 8.1.2 有關(guān)的概念 1IP地址地址 標(biāo)識(shí)計(jì)算機(jī)等網(wǎng)絡(luò)設(shè)備的網(wǎng)絡(luò)地址,由四個(gè)8位 的二進(jìn)制數(shù)組成,中間以小數(shù)點(diǎn)分隔。如: , 0 2主機(jī)名主機(jī)名(ho

4、stname) 網(wǎng)絡(luò)地址的助記名,按照域名進(jìn)行分級(jí)管理。如: 版權(quán)所有7 3端口號(hào)端口號(hào)(port number) 網(wǎng)絡(luò)通信時(shí)同一機(jī)器上的不同進(jìn)程的標(biāo)識(shí)。如: 80,21,23,25,其中11024為系統(tǒng)保留的 端口號(hào) 4服務(wù)類型服務(wù)類型(service) 網(wǎng)絡(luò)的各種服務(wù)。如: http, telnet, ftp, smtp 5協(xié)議名(協(xié)議名(protocol) 指明獲取資源所使用的傳輸協(xié)議,如: http、ftp、gopher、file 版權(quán)所有8 6資源名(資源名(resourceName) 是資源的完整地址,包括主機(jī)名、端口號(hào)、文 件名或文件內(nèi)部的一個(gè)引用。例如: http:/ 協(xié)議名:

5、/主機(jī)名 http:/ 協(xié)議 名:/機(jī)器名文件名 在Internet上,IP地址和主機(jī)名是一一對(duì)應(yīng)的, 通過域名解析可以由主機(jī)名得到機(jī)器的IP,由 于機(jī)器名更接近自然語言,容易記憶,所以使 用比IP地址廣泛,但是對(duì)機(jī)器而言只有IP地址 才是有效的標(biāo)識(shí)符。 版權(quán)所有9 8.1.3 IPAddress和IPEndPoint類 在System.Net命名空間中,有兩個(gè)專門用于處理各種類型 的IP地址信息的類型:IPAddress類和IPEndPoint類。 1.IPAddress類類 IPAddress類用于表示一個(gè)IP地址,一般使用Parse方法創(chuàng) 建IPAddress的實(shí)例。 IPAddress

6、 ip=IPAddress.Parse(); IPAddress類還提供了4個(gè)只讀屬性,分別代表程序中使用 的特殊IP地址: (1)Any:代表本地系統(tǒng)可用的任何IP地址。 (2)Broadcast:代表本地網(wǎng)絡(luò)的IP 廣播地址。 (3)Loopback:代表系統(tǒng)的回送地址。 (4)None:代表系統(tǒng)上沒有網(wǎng)絡(luò)接口。 在System.Net命名空間下,包含有一個(gè)Dns類,可以利用 該類的GetHostName()方法找到本地系統(tǒng)的主機(jī)名,然后 再用GetHostByName()找到主機(jī)的IP地址。 版權(quán)所有10 2.IPEndPoint類類 IPEndPoint對(duì)象用于表

7、示指定的IP地址/端口的組 合。其構(gòu)造函數(shù)為: IPEndPoint(IpAddress address,int port); 該類有幾個(gè)常用的屬性: (1)Address:得到或者設(shè)置IP地址。 (2)AddressFamily: 獲取網(wǎng)際協(xié)議 (IP) 地址族。 (3)Port: 獲取或設(shè)置終結(jié)點(diǎn)的 TCP 端口號(hào). 版權(quán)所有11 8.1.4 套接字(Socket) System.Net.Sockets命名空間包含了一個(gè)Socket類,它 是最基礎(chǔ)的網(wǎng)絡(luò)編程序接口。Socket類的構(gòu)造函數(shù)為: public Socket( AddressFamily addressFamily, Sock

8、etType socketType, ProtocolType protocolType); addressFamily 參數(shù)指定Socket 使用的尋址方案, socketType 參數(shù)指定Socket 的類型,protocolType 參 數(shù)指定 Socket 使用的協(xié)議。對(duì)于網(wǎng)絡(luò)上的IP通信來說, addressFamily總是使用AddressFamily.InterNetwork 枚舉值。 版權(quán)所有12 版權(quán)所有13 與Socket相關(guān)的操作: (1)接受請(qǐng)求 Socket Accept(); /創(chuàng)建一個(gè)套接字來處理到來的連接請(qǐng) 求。 (2)綁定地址 void Bind(IPEndP

9、oint localEP); /使 Socket與一個(gè)本地終 結(jié)點(diǎn)相關(guān)聯(lián)。 如果需要使用特定的本地終結(jié)點(diǎn),請(qǐng)使用Bind()方法。必 須先調(diào)用Bind(),然后才能調(diào)用Listen()方法。如果不 介意分配哪個(gè)本地地址,則可以用 IPAddress.Any作為 地址參數(shù)創(chuàng)建一個(gè) IPEndPoint,這樣,基礎(chǔ)服務(wù)提供 程序?qū)?huì)分配最適合的網(wǎng)絡(luò)地址。 版權(quán)所有14 (3)建立連接 void Connect(IPEndPoint ip); 用來與遠(yuǎn)程服務(wù)器建立連接。連接之后,可以用 Send()發(fā)送數(shù)據(jù)或用Receive()函數(shù)接收數(shù)據(jù)。 (4)監(jiān)聽請(qǐng)求 void Listen(int back

10、log);/backlog指定隊(duì)列中最 多可容納的等待接受的傳入連接數(shù)。 設(shè)置套接字處于監(jiān)聽狀態(tài)。當(dāng)數(shù)據(jù)到達(dá)某個(gè)端口 時(shí),它會(huì)向主機(jī)發(fā)送通知消息。 版權(quán)所有15 (5)發(fā)送數(shù)據(jù) 使用Send()或SendTo()方法。 int Send(byte buffer); int SendTo(byte buffer,IPEndPoint remoteIP);/向指定 的地址發(fā)送數(shù)據(jù) 發(fā)送數(shù)據(jù)還可以使用NetWorkStream對(duì)象。創(chuàng)建 NetWorkStream對(duì)象的方法是: NetWorkStream netstream=new NetWrokStream(clientSocket); Stri

11、ng message=“發(fā)送的信息”; Byte b=System.Text.Encoding.Unicode.GetBytes(messag e); netstream.Write(b,0,b.Length); 版權(quán)所有16 (6)接受數(shù)據(jù) 使用Receive()或ReceiveFrom()接收數(shù)據(jù)。 int Receive(byte buffer); int Receive(byte buffer,ref IPEndPoint ip) (7)關(guān)閉 使用Shutdown()關(guān)閉套接字。 public void Shutdown( SocketShutdown how); how指定不再允許執(zhí)

12、行的操作, 版權(quán)所有17 版權(quán)所有18 8.1.5 網(wǎng)絡(luò)流(NetworkStream) NetworkStream類提供用于網(wǎng)絡(luò)訪問的基礎(chǔ)數(shù)據(jù)流。它 提供了在阻塞模式下通過 Stream套接字發(fā)送和接收數(shù) 據(jù)的方法。要?jiǎng)?chuàng)建NetworkStream,必須提供連接的 Socket。也可指定 NetworkStream 對(duì)所提供的Socket 具有哪些FileAccess權(quán)限。默認(rèn)情況下,關(guān)閉 NetworkStream 并不會(huì)關(guān)閉所提供的Socket。如果要 使 NetworkStream 擁有關(guān)閉所提供的 Socket 的權(quán)限, 則必須將ownsSocket構(gòu)造函數(shù)參數(shù)的值指定為 true。

13、 該類的Write()和Read()方法用于簡(jiǎn)單的單線程同步阻 塞 I/O。若要使用不同的線程來處理I/O,則請(qǐng)考慮使用 BeginWrite()/ EndWrite()和BeginRead()/ EndRead()方 法進(jìn)行通信。 版權(quán)所有19 1NetworkStream的構(gòu)造函數(shù)的構(gòu)造函數(shù) (1)public NetworkStream(Socket):為指定的Socket 創(chuàng)建 NetworkStream類的新實(shí)例。 (2)public NetworkStream(Socket, bool):用指定的 Socket所屬權(quán)為指定的Socket初始化 NetworkStream 類的新實(shí)例

14、。 (3)public NetworkStream(Socket, FileAccess):用指 定的訪問權(quán)限為指定的Socket創(chuàng)建 NetworkStream類 的新實(shí)例。 (4)public NetworkStream(Socket, FileAccess, bool): 用指定的訪問權(quán)限和指定的Socket所屬權(quán)為指定的 Socket創(chuàng)建 NetworkStream類的新實(shí)例。 2NetworkStream類的主要成員類的主要成員 版權(quán)所有20 8.2 面向連接的套接字 IP連接領(lǐng)域有兩種通信類型:面向連接的和無連 接的。在面向連接的套接字中,使用TCP協(xié)議來 建立兩個(gè)IP地址端點(diǎn)之間

15、的會(huì)話。一旦建立了這 種連接,就可以在設(shè)備之間可靠地傳輸數(shù)據(jù)。在 使用套接字通信過程中主動(dòng)發(fā)起通信的一方被稱 為客戶端,接受請(qǐng)求進(jìn)行通信的一方稱為服務(wù)器。 為了建立面向連接的套接字,服務(wù)器和客戶端必 須分別進(jìn)行編程。 版權(quán)所有21 8.2.1 面向連接的套接字程序基本結(jié)構(gòu)面向連接的套接字程序基本結(jié)構(gòu) 版權(quán)所有22 1服務(wù)器端程序的基本結(jié)構(gòu)服務(wù)器端程序的基本結(jié)構(gòu) (1)建立套接字。 (2)將套接字綁定到用于TCP通信的本地IP地 址和端口上。 (3)設(shè)置套接字處于監(jiān)聽狀態(tài)。 (4)等待用戶請(qǐng)求。 (5)有用戶請(qǐng)求,可以發(fā)送數(shù)據(jù)或接受數(shù)據(jù)。 (6)關(guān)閉套接字。 版權(quán)所有23 2. 客戶端程序的基本

16、結(jié)構(gòu)客戶端程序的基本結(jié)構(gòu) (1)建立套接字。 (2)與服務(wù)器進(jìn)行連接。 (3)發(fā)送或接受數(shù)據(jù)。 (4)關(guān)閉套接字。 版權(quán)所有24 【案例案例8-1】一個(gè)簡(jiǎn)單 TCP/IP客戶/服務(wù)器程序。 本案例建立一個(gè)控制臺(tái)程序, 服務(wù)器程序啟動(dòng)后,等待客 戶連接,客戶程序啟動(dòng)后主 動(dòng)與服務(wù)器連接,連接成功 服務(wù)器向客戶端發(fā)送信息 “連接成功!”,客戶端接 到信息后向服務(wù)器發(fā)送信息 “服務(wù)器你好”,服務(wù)器再 向客戶端發(fā)送信息“客戶你 好“。運(yùn)行界面如圖8-2所 示,(a)為服務(wù)器,(b) 為客戶端。 版權(quán)所有25 8.2.2 使用同步套接字 在通過Socket進(jìn)行連接、接收、發(fā)送操作時(shí), 客戶機(jī)或服務(wù)器會(huì)暫

17、停當(dāng)前工作,處于等待狀 態(tài),即一直等有數(shù)據(jù)時(shí)才繼續(xù)執(zhí)行下面的語句。 一般在阻塞方式下使用這種方式??梢?,同步 套接字適用于網(wǎng)絡(luò)傳輸量不大的情況。當(dāng)網(wǎng)絡(luò) 傳輸量很大時(shí),長(zhǎng)時(shí)間的等待可能回讓用戶無 法忍受,這時(shí)需要使用異步套接字。 版權(quán)所有26 【案例案例8-2】使用同步套接字。 本案例創(chuàng)建一個(gè)接收來自客戶端 的連接請(qǐng)求的服務(wù)器。該服務(wù)器 是用同步套接字生成的,因此在 等待來自客戶端的連接時(shí)掛起服 務(wù)器應(yīng)用程序的執(zhí)行。該應(yīng)用程 序接收來自客戶端的字符串,在 控制臺(tái)顯示該字符串,然后將該 字符串回顯到客戶端。來自客戶 端的字符串必須包含字符串 “”,以發(fā)出表示消息結(jié) 尾的信號(hào)??蛻舳耸怯猛教捉?字

18、生成的,因此掛起客戶端應(yīng)用 程序的執(zhí)行,直到服務(wù)器返回響 應(yīng)為止。該應(yīng)用程序?qū)⒆址l(fā) 送到服務(wù)器,然后在控制臺(tái)顯示 該服務(wù)器返回的字符串。運(yùn)行界 面如圖8-3所示,(a)為服務(wù)器, (b)為客戶端。 版權(quán)所有27 8.2.3 使用TcpListener和TcpClient 在System.Net.Sockets.命名空間下,有兩個(gè)專門 用于TCP協(xié)議編程的類:TCPClient和 TCPListener類。這兩個(gè)類提供了直觀的容易使 用的屬性和方法,從而降低了TCP協(xié)議編程的難 度。 版權(quán)所有28 1. TcpListener類類 TcpListener 類提供一些簡(jiǎn)單方法,用于在阻塞 同步

19、模式下偵聽和接受傳入連接請(qǐng)求??蛻舳?使用TcpClient或Socket來連接TcpListener???使用IPEndPoint、本地 IP 地址及端口號(hào)或者僅 使用端口號(hào),來創(chuàng)建 TcpListener。可以將本地 IP 地址指定為 Any,將本地端口號(hào)指定為 0 (如果希望基礎(chǔ)服務(wù)提供程序?yàn)槟峙溥@些 值)。如果選擇這樣做,可使用 LocalEndpoint來標(biāo)識(shí)已指定的信息。 版權(quán)所有29 Start()方法用來開始偵聽傳入的連接請(qǐng)求。Start() 將對(duì)傳入連接進(jìn)行排隊(duì),直至您調(diào)用 Stop()方法 或它已經(jīng)完成MaxConnections排隊(duì)為止??墒?用AcceptSocket

20、() 或 AcceptTcpClient()從傳入連 接請(qǐng)求隊(duì)列提取連接。這兩種方法將阻塞。如果 要避免阻塞,可首先使用 Pending()方法來確定 隊(duì)列中是否有可用的連接請(qǐng)求。調(diào)用Stop()方法 來關(guān)閉 TcpListener。 版權(quán)所有30 2. TcpClient類類 TcpClient類為 TCP 網(wǎng)絡(luò)服務(wù)提供客戶端連接。 TcpClient 類提供了一些簡(jiǎn)單的方法,用于在同步阻塞模 式下通過網(wǎng)絡(luò)來連接、發(fā)送和接收流數(shù)據(jù)。 為使TcpClient連接并交換數(shù)據(jù),使用 TCP 創(chuàng)建的 TcpListener或 Socket必須偵聽是否有傳入的連接請(qǐng)求。 可以使用下面兩種方法之一連接到

21、該偵聽器: (1)創(chuàng)建一個(gè)TcpClient,并調(diào)用三個(gè)可用的Connect方 法之一。 public void Connect(IPEndPoint):使用指定的遠(yuǎn)程網(wǎng)絡(luò) 終結(jié)點(diǎn)將客戶端連接到遠(yuǎn)程 TCP 主機(jī)。 public void Connect(IPAddress, int):使用指定的 IP 地 址和端口號(hào)將客戶端連接到 TCP 主機(jī)。 public void Connect(string, int):將客戶端連接到指定 主機(jī)上的指定端口。 版權(quán)所有31 (2)使用遠(yuǎn)程主機(jī)的主機(jī)名和端口號(hào)創(chuàng)建 TcpClient。此構(gòu)造函數(shù)將自動(dòng)嘗試一個(gè)連接。 要發(fā)送和接收數(shù)據(jù),請(qǐng)使用 GetSt

22、ream()方法來 獲取一個(gè)NetworkStream。調(diào)用 NetworkStream 的Write()和Read()方法與遠(yuǎn)程主機(jī)之間發(fā)送和接 收數(shù)據(jù)。使用 Close()方法釋放與TcpClient 關(guān)聯(lián) 的所有資源。 版權(quán)所有32 【案例案例8-3】簡(jiǎn)單的聊 天程序。 本案例設(shè)計(jì)一個(gè) Windows應(yīng)用程序,能 夠?qū)崿F(xiàn)客戶與服務(wù)器的 一對(duì)一聊天??蛻舳撕?服務(wù)端的界面設(shè)計(jì)基本 相似。窗體上有2個(gè)文本 框和2個(gè)按鈕。用于顯示 信息的文本框的Multiline 屬性設(shè)為True。 版權(quán)所有33 8.2.4 使用異步套接字 同步套接字在監(jiān)聽時(shí)處于暫停狀態(tài),而異步套接 字可以在監(jiān)聽的同時(shí)進(jìn)行其

23、他操作。.NET提供了 一種稱為AsyncCallback的委托,該委托允許啟 動(dòng)異步的功能,并在異步功能結(jié)束后執(zhí)行委托提 供的方法。 版權(quán)所有34 1異步套接字服務(wù)器程序異步套接字服務(wù)器程序 異步套接字服務(wù)器需要一個(gè)開始接受網(wǎng)絡(luò)連接請(qǐng) 求的方法,一個(gè)處理連接請(qǐng)求并開始接收網(wǎng)絡(luò) 數(shù)據(jù)的回調(diào)方法以及一個(gè)結(jié)束接收數(shù)據(jù)的回調(diào) 方法。程序結(jié)構(gòu)如下: (1)建立Socket。 (2)將套接字綁定到用于TCP通信的本地IP地 址和端口上。 (3)設(shè)置套接字處于監(jiān)聽狀態(tài)。 版權(quán)所有35 (4)使用BeginAccept 方法開始接受新連接。它負(fù)責(zé)獲 取將處理連接的 Socket 實(shí)例,并將 Socket 提

24、交給將 處理請(qǐng)求的線程。 public IasyncResult BeginAccept(AsyncCallback callback,Object state); 第一參數(shù)為AsyncCallback類型的委托,利用此參數(shù)關(guān)聯(lián) 一個(gè)回調(diào)方法。第二個(gè)參數(shù)為Object類型,用于將狀態(tài) 信息傳遞給委托提供的方法。 (5)設(shè)計(jì)回調(diào)方法。 執(zhí)行BeginAccept方法時(shí)不會(huì)停下來等待客戶端連接, 而是繼續(xù)往下執(zhí)行。同時(shí)BeginAccept也繼續(xù)執(zhí)行,一 旦BeginAccept接收到新的客戶端連接, AsyncCallback委托就會(huì)自動(dòng)調(diào)用回調(diào)方法。在回調(diào)方 法中,通過IasyncResult

25、類型的參數(shù)獲得狀態(tài)信息,并 調(diào)用EndAccept方法完成接受請(qǐng)求。 版權(quán)所有36 (6)在回調(diào)方法中調(diào)用BeginReceiive方法接收數(shù)據(jù)或調(diào) 用BeginSend()發(fā)送數(shù)據(jù)。這兩個(gè)方法都有6個(gè)參數(shù): 參數(shù)1:緩沖區(qū)(字節(jié)數(shù)組)。 參數(shù)2:開始發(fā)送或接收的位置。 參數(shù)3:發(fā)送或接收的字節(jié)數(shù)。 參數(shù)4:SocketFlags值的按位組合。 參數(shù)5:異步回調(diào)函數(shù)。 參數(shù)6:表示狀態(tài)的對(duì)象。 (7)完成發(fā)送后,在回調(diào)方法中調(diào)用EndSend完成本次發(fā) 送。 版權(quán)所有37 2異步套接字客戶端程序異步套接字客戶端程序 客戶端程序與服務(wù)器端程序有很多共同點(diǎn)。主要注意: 在異步套接字編程中,客戶端必

26、須使用BeginConnect方 法連接到遠(yuǎn)程主機(jī),其格式為: IAsyncResult BeginConnect(EndPoint ep,AsyncCallBack callback,Object state); 其中第一個(gè)參數(shù)是遠(yuǎn)程主機(jī)的EndPoint對(duì)象;第二個(gè)參數(shù) 用于和遠(yuǎn)程主機(jī)連接成功后執(zhí)行委托的方法;最后一個(gè) 參數(shù)是狀態(tài)對(duì)象,用于傳遞必要的數(shù)據(jù)。 版權(quán)所有38 【案例案例8-4】基于異步 套接字的聊天程序。 本案例與案例8-3功能基 本類似,單采用了異步 套接字技術(shù)。 版權(quán)所有39 8.3 面向無連接的套接字面向無連接的套接字 UDP協(xié)議使用無連接的套接字,無連接的套接字 不需要

27、在網(wǎng)絡(luò)設(shè)備之間發(fā)送連接信息。因此,通 信的兩端基本上是對(duì)等的,很難確定誰是服務(wù)器 誰是客戶機(jī)。我們不妨把先發(fā)送信息的一端看成 客戶端,先接受數(shù)據(jù)的一端看成是服務(wù)器。很難 確定誰是服務(wù)器誰是客戶機(jī)。建立面向無連接的 套接字編程。 版權(quán)所有40 8.3.1 面向無連接的套接字程序基本結(jié)構(gòu)面向無連接的套接字程序基本結(jié)構(gòu) 版權(quán)所有41 1服務(wù)器端程序的結(jié)構(gòu)服務(wù)器端程序的結(jié)構(gòu) (1)建立套接字。 (2)將套接字綁定到用于UDP通信的本地IP地 址和端口上。 (3)用ReceiveFrom()方法接收數(shù)據(jù)。 (4)用SendTo()方法發(fā)送數(shù)據(jù)。 (5)關(guān)閉套接字。 版權(quán)所有42 2客戶端程序的結(jié)構(gòu)客戶端程序的結(jié)構(gòu) (1)建立套接字。 (2)將套接字綁定到用于UDP通信的本地IP地址 和端口上。 (3)用SendTo()方法發(fā)送數(shù)據(jù)。 (4)用ReceiveFrom()方法接收數(shù)據(jù)。 (5)關(guān)閉套接字。 版權(quán)所有43 8.3.2與面向連接的套接字的主要區(qū)別與面向連接的套接字的主要區(qū)別 (1)建立Socket時(shí)指定的協(xié)議為SocketType為 SocketType.Dgram,ProtocolType為 ProtocolType.UDP協(xié)議。 IPAddress ipAddress =IPAddress.Parse(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論