Mina.Net实现的UDP协议消息收发Demo
2016-04-29 13:15
483 查看
using Mina.Filter.Codec; using Mina.Filter.Codec.TextLine; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using Mina.Core.Session; using System.Threading; namespace MinaDemo { class UDPMessageDemo { static void Main(string[] args) { var port = 1024; //服务端 var acceptor = new Mina.Transport.Socket.AsyncDatagramAcceptor(); acceptor.FilterChain.AddLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Encoding.UTF8))); acceptor.MessageReceived += (ss, ee) =>//接收到消息后 { Console.WriteLine("服务端收到" + ee.Session.RemoteEndPoint + "的消息:" + ee.Message + ",并广播:I love you all"); acceptor.Broadcast("I love you all"); //只有服务端接收到客户端发来消息时,才会把客户端存放到acceptor.ManagedSessions中,才能广播到。超过1分钟后,如果没有收到 Session,就会自动掉线的。 }; acceptor.SessionIdle += (ss, ee) => { }; acceptor.SessionCreated += (ss, ee) => { ee.Session.Config.SetIdleTime(IdleStatus.BothIdle, 10); }; acceptor.Bind(new IPEndPoint(IPAddress.Loopback, port)); //客户端 var connector = new Mina.Transport.Socket.AsyncDatagramConnector(); connector.FilterChain.AddLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Encoding.UTF8))); var session = connector.Connect(new IPEndPoint(IPAddress.Loopback, port)).Await().Session; connector.MessageReceived += (ss, ee) => { Console.WriteLine("客户端1收到:" + ee.Message); }; //客户端2 var connector2 = new Mina.Transport.Socket.AsyncDatagramConnector(); connector2.FilterChain.AddLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Encoding.UTF8))); var session2 = connector2.Connect(new IPEndPoint(IPAddress.Loopback, port)).Await().Session; connector2.MessageReceived += (ss, ee) => { Console.WriteLine("客户端2收到:" + ee.Message); }; //让客户端1发送并连接 session.Write("i am 1"); Console.WriteLine("客户端1发送:i am 1"); int count = 0; //发送 while (true) { Thread.Sleep(1000); var line = Console.ReadLine(); count++; Console.WriteLine("输入exit退出:" + count); if (line == "exit") { session.Close(true); acceptor.Unbind(); acceptor.Dispose(); break; } session2.Write("I Am Client2 " + line); Console.WriteLine("客户端2发送:" + "I Am Client2 " + line); } } } }
相关文章推荐
- 如何用RxJava替代EventBus进行事件的分发?
- springMVC 几种页面跳转方式
- springMVC 几种页面跳转方式
- 数据存储之解档归档
- View事件拦截的两种方法
- Linux常用命令大全
- Java正则表达式入门
- 《构建之法》第六、七章读后感
- 黑马程序员_反射
- 今天属于老鹰乐队--加州旅馆
- 线程之间的通信方式
- [python]fabric实现远程操作和部署
- leetcode——96——Unique Binary Search Trees
- 深入理解Java的接口和抽象类
- Python itertools 模块 列表元素 字符串 反向遍历合并
- Java 通过反射原理,通过Map转为Java POJO对象,适用于对象包含List,Map,数组等
- 疯狂互联网产品系列(一、别人的今日头条)
- 源码包安装 yum 7.4
- 判断文件结束的几种方法和eof()函数
- Dom4jXPath综合应用