與眾不同windows phone (31)

來源:互聯網
上載者:User

Communication(通訊)之基於 Socket UDP 開發一個多人聊天室

介紹

與眾不同 windows phone 7.5 (sdk 7.1) 之通訊

執行個體 - 基於 Socket UDP 開發一個多人聊天室

樣本

1、服務端

Main.cs

/*  * Socket UDP 聊天室的服務端  *   * 註:udp 報文(Datagram)的最大長度為 65535(包括報文頭)  */   using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;    using System.Net.Sockets; using System.Net; using System.Threading; using System.IO;    namespace SocketServerUdp {     public partial class Main : Form     {         SynchronizationContext _syncContext;            System.Timers.Timer _timer;            // 用戶端終結點集合         private List<IPEndPoint> _clientList = new List<IPEndPoint>();            public Main()         {             InitializeComponent();                // UI 線程             _syncContext = SynchronizationContext.Current;                // 啟動後台線程接收資料             Thread thread = new Thread(new ThreadStart(ReceiveData));             thread.IsBackground = true;             thread.Start();                // 每 10 秒運行一次計時器所指定的方法,群發資訊             _timer = new System.Timers.Timer();             _timer.Interval = 10000d;             _timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);             _timer.Start();         }            // 接收資料         private void ReceiveData()         {             // 執行個體化一個 UdpClient,監聽指定連接埠,用於接收資訊             UdpClient listener = new UdpClient(3367);             // 用戶端終結點             IPEndPoint clientEndPoint = null;                try            {                 while (true)                 {                     // 一直等待,直至接收到資料為止(可以獲得接收到的資料和用戶端終結點)                     byte[] bytes = listener.Receive(ref clientEndPoint);                     string strResult = Encoding.UTF8.GetString(bytes);                        OutputMessage(strResult);                        // 將發送此資訊的用戶端加入用戶端終結點集合                     if (!_clientList.Any(p => p.Equals(clientEndPoint)))                         _clientList.Add(clientEndPoint);                 }             }             catch (Exception ex)             {                 OutputMessage(ex.ToString());             }         }            private void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)         {             // 每 10 秒群發一次資訊             SendData(string.Format("webabcd 對所有人說:大家好! 【資訊來自服務端 {0}】", DateTime.Now.ToString("hh:mm:ss")));         }            // 發送資料         private void SendData(string data)         {             // 向每一個曾經向服務端發送過資訊的用戶端發送資訊             foreach (IPEndPoint ep in _clientList)             {                 // 執行個體化一個 UdpClient,用於發送資訊                 UdpClient udpClient = new UdpClient();                    try                {                     byte[] byteData = UTF8Encoding.UTF8.GetBytes(data);                     // 發送資訊到指定的用戶端終結點,並返回傳送的位元組數                     int count = udpClient.Send(byteData, byteData.Length, ep);                 }                 catch (Exception ex)                 {                     OutputMessage(ex.ToString());                 }                    // 關閉 UdpClient                 // udpClient.Close();             }         }            // 在 UI 上輸出指定資訊         private void OutputMessage(string data)         {             _syncContext.Post((p) => { txtMsg.Text += p.ToString() + "\r\n"; }, data);         }     } }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.