用C#设计一个基于UDP协议的简单网络聊天器-阿里云开发者社区

开发者社区> 科技小先锋> 正文

用C#设计一个基于UDP协议的简单网络聊天器

简介:
+关注继续查看
用C#设计一个基于UDP协议的简单网络聊天器
 
 
不多说废话,这是一个简单的基于UDP协议的组播群聊器
界面如下:
 
源文件见附件:
代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace MulticastExample
{
    public partial class Form1 : Form
    {
        delegate void AppendStringCallback(string text);
        AppendStringCallback appendStringCallback;
        //使用的接收端口号
        private int port = 8001;
        private UdpClient udpClient;
        public Form1()
        {
            InitializeComponent();
            appendStringCallback = new AppendStringCallback(AppendString);
        }
        private void AppendString(string text)
        {
            if (richTextBox1.InvokeRequired)
            {
                richTextBox1.Invoke(appendStringCallback, text);
            }
            else
            {
                richTextBox1.AppendText(text + "\r\n");
            }
        }
        private void ReceiveData()
        {
            udpClient = new UdpClient(port);
            //必须使用组播的地址范围内的地址
            udpClient.JoinMulticastGroup(IPAddress.Parse("224.100.0.1"), 50);
            IPEndPoint remote = null;
            //接收从远程主机发送过来的信息
            while (true)
            {
                try
                {
                    //关闭udpClient时此句会产生异常
                    byte[] bytes = udpClient.Receive(ref remote);
                    string str = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
                    AppendString(string.Format("来自{0}:{1}", remote, str));
                }
                catch
                {
                    //退出循环,结束线程
                    break;
                }
            }
        }
        private void btnSend_Click(object sender, EventArgs e)
        {
            UdpClient myUdpClient = new UdpClient();
            try
            {
                //允许发送和接收广播数据报
                myUdpClient.EnableBroadcast = true;
                //必须使用组播地址范围内的地址
                IPEndPoint iep = new IPEndPoint(IPAddress.Parse("224.100.0.1"), port);
                //将发送内容转换为字节数组
                byte[] bytes = Encoding.UTF8.GetBytes(txbSend.Text);
                //向子网发送信息
                myUdpClient.Send(bytes, bytes.Length, iep);
                txbSend.Clear();
                txbSend.Focus();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message, "发送失败");
            }
            finally
            {
                myUdpClient.Close();
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            Thread receiveThread = new Thread(new ThreadStart(ReceiveData));
            //将线程设为后台运行
            receiveThread.IsBackground = true;
            receiveThread.Start();
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            udpClient.Close();
        }
    }
}


本文转自gauyanm 51CTO博客,原文链接:http://blog.51cto.com/gauyanm/340047,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
python+soket实现UDP协议的客户/服务端中文聊天程序
没什么特别的东西,网上烂大街的C/S框架。(基于windows 7 + python 3.4)   为了实现中文聊天,我加入了一点修改: msg.encode('utf-8') # msg 为输入(且将要发送出)的信息 data.decode('utf-8') # data 为接收的信息 这样做的原因是 sendto 函数只能发送ASCII字符,不支持发送中文(在 python3 中,中文默认是unicode编码)。
1131 0
python+soket实现 TCP 协议的客户/服务端中文(自动回复)聊天程序
【吐槽】 网上的代码害死人,看着都写的言之凿凿,可运行就是有问题。 有些爱好代码、喜欢收藏代码的朋友,看到别人的代码就粘贴复制过来。可是起码你也试试运行看啊大哥   【正文】 昨日修改运行了UDP协议的C/S聊天程序,可是TCP协议的怎么都不行。
1143 0
Java网络编程(TCP_UDP)
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.
758 0
网络基础CCNP|传输层与以太网协议
以太网协议与传输层简介
1063 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7758 0
06.Java网络编程(java GUI实现的聊天界面)
目前测试存在两个问题 1.最初是继承Frame来实现界面显示,后来发现,界面中部分控件存在时而显示时而不显示的问题,查找资料之后,将Frame修为JFrame,并且修改setVisible的时机,界面显示的问题解决,不显示的原因,有一种说法就是注释中提到的 2.
1081 0
4571
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载