国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

閑來無事,寫個基于UDP協議的Socket通訊Demo

2019-11-17 03:19:33
字體:
來源:轉載
供稿:網友

閑來無事,寫個基于UDP協議的Socket通訊Demo

  項目一期已經做完,二期需求還沒定稿,所以最近比較閑。

  上一篇寫的是TCP協議,今天寫一下UDP協議。TCP是有連接協議,所以發送和接收消息前客戶端和服務端需要建立連接;UDP是無連接協議,所以發送消息前不需要建立連接,只需向指定的網絡端點發送消息即可,不管端點是否存在都可以發送,無論消息是否到達端點都不關心,接收消息前也不需要建立連接,只需要在本地綁定的端口上接收就可以了,UDP沒有明確的客戶端和服務端。

  程序是基于命令行的,啟動一個實例之后根據界面提示輸入本地端口號、遠程ip、遠程端口號即可,可以啟動多個實例互相通訊。

  程序啟動之后首先根據輸入的本地端口號綁定本地端口,其次啟動一個線程接收本地端口的數據,然后界面上提示輸入消息,輸入完成則發送到遠程IP和遠程端口號,界面上再次提示輸入消息……

  運行效果圖:

圖1. 實例1

圖2. 實例2

關鍵代碼

  綁定本地端口:

1 var localPoint = new IPEndPoint(0, localPort);2 socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, PRotocolType.Udp);3 socket.Bind(localPoint);

  

  啟動線程執行數據接收:

1 // 啟動新線程負責接收數據2 ThreadPool.QueueUserWorkItem(OnReceive, socket);3 Show("準備就緒");

  數據接收細節:

 1 /// <summary> 2 /// 接收數據 3 /// </summary> 4 /// <param name="obj"></param> 5 private static void OnReceive(object obj) 6 { 7     try 8     { 9         var socket = obj as Socket;10         if (socket == null)11         {12             return;13         }14 15         while (true)16         {17             try18             {19                 var receiveBuffer = new byte[1024];20                 // 接收數據21                 EndPoint remotePoint = new IPEndPoint(IPAddress.Any, 0);22                 var receiveLength = socket.ReceiveFrom(receiveBuffer, ref remotePoint);23                 ...24             }25             catch (ThreadAbortException)26             {27                 throw;28             }29             catch (SocketException exception)30             {31                 ...32             }33             catch (Exception exception)34             {35                 ...36             }37         }38     }39     catch (ThreadAbortException)40     {41         ...42     }43     catch (Exception exception)44     {45         ...46     }47 }

  循環執行數據發送:

 1 do 2 { 3     try 4     { 5         Show("請輸入消息:", false); 6         var msg = Read(); 7         ... 8         // 發送數據 9         EndPoint sendPoint = new IPEndPoint(address, remotePort);10         var sendLength = socket.SendTo(sendBuffer, sendPoint);11         ...12     }13     catch (SocketException exception)14     {15         ...16     }17     catch (Exception exception)18     {19         ...20     }21 } while (true);

  本人才疏學淺,歡迎大家批評指正!

源代碼下載


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南川市| 苍梧县| 麦盖提县| 高青县| 乌什县| 桐梓县| 浮梁县| 尉犁县| 深州市| 贵溪市| 阳新县| 垫江县| 隆德县| 益阳市| 舞阳县| 南木林县| 六盘水市| 邯郸县| 酒泉市| 修武县| 定远县| 华宁县| 肃宁县| 长沙县| 敦煌市| 来安县| 商丘市| 化州市| 庄浪县| 龙州县| 阿克陶县| 阿勒泰市| 九寨沟县| 水城县| 赣榆县| 垣曲县| 黄浦区| 临颍县| 夏津县| 简阳市| 丰县|