与众不同windows phone (31)

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应用商店,以便于您获取更多的相关知识。

时间: 2024-10-29 06:58:31

与众不同windows phone (31)的相关文章

与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室

原文:与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室 作者:webabcd 介绍与众不同 windows phone 7.5 (sdk 7.1) 之通信 实例 - 基于 Socket UDP 开发一个多人聊天室 示例1.服务端Main.cs /* *

与众不同windows phone (15) Media(媒体)之后台播放音频

介绍 与众不同 windows phone 7.5 (sdk 7.1) 之媒体 通过 AudioPlayerAgent 实现在后台播放音频 示例 演示如何通过后台代理的方式来实现音频在后台的播放 1.后台代理 MyAudioPlayerAgent/AudioPlayer.cs /* * 本例演示如何播放后台音频(以 AudioPlayerAgent 为例,另 AudioStreamingAgent 用于流式播放音频) * 建议使用 AudioPlaybackAgent 类型的模板创建此项目 *

与众不同 windows phone (15) - Media(媒体)之后台播放音频

原文:与众不同 windows phone (15) - Media(媒体)之后台播放音频 [索引页][源码下载] 与众不同 windows phone (15) - Media(媒体)之后台播放音频 作者:webabcd 介绍与众不同 windows phone 7.5 (sdk 7.1) 之媒体 通过 AudioPlayerAgent 实现在后台播放音频 示例演示如何通过后台代理的方式来实现音频在后台的播放1.后台代理MyAudioPlayerAgent/AudioPlayer.cs /*

与众不同windows phone (6) Isolated Storage(独立存储)

介绍 与众不同 windows phone 7.5 (sdk 7.1) 之独立存储 概述 独立存储的读/写的Demo 读/写 key/value 形式数据到独立存储的快捷方法 示例 1.概述 Summary.xaml <phone:PhoneApplicationPage x:Class="Demo.IsolatedStorageDemo.Summary" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/prese

与众不同windows phone (47)

8.0 其它: 锁屏信息和锁屏背景, 电池状态, 多分辨率, 商店, 内置协议, 快速恢复 介绍 与众不同 windows phone 8.0 之 其它 锁屏信息和锁屏背景 电池状态 多分辨率应用 与 Windows Phone 商店相关的操作 系统的内置协议 快速恢复应用 App.xaml.cs 的说明 manifest 的说明 示例 1.演示如何发送信息到锁屏,以及如何修改锁屏背景 Others/LockScreen.xaml <phone:PhoneApplicationPage x:Cl

与众不同windows phone (46) 8.0 通信: Socket, 其它

介绍 与众不同 windows phone 8.0 之 通信 Socket Demo 获取当前连接的信息 http rss odata socket bluetooth nfc voip winsock 示例 1.演示 socket tcp 的应用 (本例既做服务端又做客户端) Communication/SocketDemo.xaml <phone:PhoneApplicationPage x:Class="Demo.Communication.SocketDemo" xmln

与众不同windows phone (45) 8.0 语音: TTS, 语音识别, 语音命令

介绍 与众不同 windows phone 8.0 之 语音 TTS(Text To Speech) 语音识别 语音命令 示例 1.演示 TTS(Text To Speech)的应用 Speech/TTS.xaml <phone:PhoneApplicationPage x:Class="Demo.Speech.TTS" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmln

与众不同windows phone (44) 8.0 位置和地图

介绍 与众不同 windows phone 8.0 之 位置和地图 位置(GPS) - Location API 诺基亚地图 示例 1.演示新 Location API 的应用 GPS/Demo.xaml <phone:PhoneApplicationPage x:Class="Demo.GPS.Demo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x=&qu

与众不同windows phone (43)

8.0 相机和照片: 镜头的可扩展性, 图片的可扩展性, 图片的自动上传扩展 介绍 与众不同 windows phone 8.0 之 相机和照片 镜头的可扩展性 图片的可扩展性 图片的自动上传扩展 示例 1.演示如何将本 app 注册为镜头扩展 CameraAndPhoto/LensExtensibility.xaml <phone:PhoneApplicationPage x:Class="Demo.CameraAndPhoto.LensExtensibility" xmlns