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); } } }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索udp聊天程序
, 客户端
, using
, system
, 信息
, udp多线程
, UdpClient
, 终结点
, udp聊天室
, 共享UdpClient
System.Timers.Timer
windows phone、windowsphone、windows phone 10、windowsphone手机、windowsphone应用商店,以便于您获取更多的相关知识。