日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[深入浅出WP8.1(Runtime)]Socket编程之UDP协议

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [深入浅出WP8.1(Runtime)]Socket编程之UDP协议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

13.3 Socket編程之UDP協議

??? UDP協議和TCP協議都是Socket編程的協議,但是與TCP協議不同,UDP協議并不提供超時重傳,出錯重傳等功能,也就是說其是不可靠的協議。UDP適用于一次只傳送少量數據、對可靠性要求不高的應用環境。既然 UDP 是一種不可靠的網絡協議,那么還有什么使用價值或必要呢?其實不然,在有些情況下UDP協議可能會變得非常有用。因為UDP具有TCP所望塵莫及的速度優勢。雖然TCP協議中植入了各種安全保障功能,但是在實際執行的過程中會占用大量的系統開銷,無疑使速度受到嚴重的影響。反觀UDP由于排除了信息可靠傳遞機制,將安全和排序等功能移交給上層應用來完成,極大降低了執行時間,使速度得到了保證。那么在Windows Phone里面的UDP協議的通訊是通過DatagramSocket類來實現消息的發送,接受和監聽等功能的,下面我們來看一下如何在Windows Phone中實現UDP協議的通信。

13.3.1 發送和接收消息

??? 使用UDP協議進行消息的發送和接收和TCP協議是有區別的,UDP協議并不一定要進行連接的操作,它可以直接通過主機地址進行消息的發送和接收。使用UDP協議進行消息的發送和接收也一樣是要依賴DataWriter類和DataReader類來進行分別進行數據的發送和接收。下面我們來看一下在Windows Phone中使用UDP協議進行發送和接收消息的兩種方式。

??? (1)使用主機名和端口號直接發送和接收消息

??? 創建一個DatagramSocket類對象,調用GetOutputStreamAsync方法獲取輸出流IOutputStream對象,再使用IOutputStream對象創建DataWriter對象進行消息的發送。接收消息直接訂閱DatagramSocket對象的MessageReceived事件接收消息,使用DataReader對象獲取消息的內容。示例代碼如下所示:

// 主機名 HostName hostName = new HostName("localhost");DatagramSocket datagramSocket = new DatagramSocket();// 訂閱接收消息的事件 datagramSocket.MessageReceived += datagramSocket_MessageReceived;// 獲取輸出流 IOutputStream outputStream = await datagramSocket.GetOutputStreamAsync(hostName, "22112");// 創建DataWriter對象發送消息 DataWriter writer = new DataWriter(datagramSocket.OutputStream);writer.WriteString("test");await writer.StoreAsync();// 接收消息的事件處理程序async void datagramSocket_MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args){// 獲取DataReader對象,讀取消息內容 DataReader dataReader = args.GetDataReader();uint length = dataReader.UnconsumedBufferLength;string content = dataReader.ReadString(length);}

?

??? (2)先連接Socket再發送接收消息

??? DatagramSocket類也提供了ConnectAsync方法來負責Socket的連接,連接成功之后就可以使用該DatagramSocket對象來進行消息的發送,消息的接收和第一種方式的實現是一樣的。示例代碼如下所示:

// 創建DatagramSocket DatagramSocket datagramSocket = new DatagramSocket();datagramSocket.MessageReceived += datagramSocket_MessageReceived;// 連接服務器await datagramSocket.ConnectAsync(new HostName("localhost"), "22112");// 發送消息 DataWriter writer = new DataWriter(datagramSocket.OutputStream);writer.WriteString("test");await writer.StoreAsync();

?

13.3.2 UDP協議服務器端監聽消息

??? UDP協議在實現服務器端監聽消息的功能也是使用DatagramSocket類去實現的,實現的步驟如下所示:

?? ?(1)注冊DatagramSocket對象的MessageReceived事件接收消息(注意和TCP的ConnectionReceived事件的區別);

??? (2)使用BindServiceNameAsync方法建立起本地服務器的監聽;

??? (3)使用GetOutputStreamAsync方法傳入服務器地址和端口號,獲取IOutputStream對象,從而創建DataWriter對象向客戶端發送消息。

??? UDP協議服務器端監聽消息的代碼示例如下所示:

// 創建DatagramSocket對象,調用BindServiceNameAsync方法綁定服務 DatagramSocket datagramSocket = new DatagramSocket();// 訂閱MessageReceived事件監聽客戶端發送過來的消息 datagramSocket.MessageReceived += datagramSocket_MessageReceived;await datagramSocket.BindServiceNameAsync("22112");// MessageReceived事件的處理程序,獲取到客戶端的地址后可以向客戶端發送消息async void datagramSocket_MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args){// 讀取客戶端發送過來的消息 DataReader dataReader = args.GetDataReader();uint length = dataReader.UnconsumedBufferLength;string content = dataReader.ReadString(length);IOutputStream outputStream = await sender.GetOutputStreamAsync(args.RemoteAddress,args.RemotePort);DataWriter writer = new DataWriter(outputStream);writer.WriteString(content + "(服務器發送)" );await writer.StoreAsync();}

本文來源于《深入淺出Windows Phone 8.1 應用開發》

WP8.1 Runtime文章列表:http://www.cnblogs.com/linzheng/p/3998037.html

源代碼下載:http://vdisk.weibo.com/s/zt_pyrfNHb99O

歡迎關注我的微博@WP林政?? 微信公眾號:wp開發(號:wpkaifa)

WP8.1技術交流群:372552293

轉載于:https://www.cnblogs.com/linzheng/p/4018601.html

總結

以上是生活随笔為你收集整理的[深入浅出WP8.1(Runtime)]Socket编程之UDP协议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。