Mina.Net实现的UDP协议消息收发Demo

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);
            }
        }

    }
}
时间: 2024-11-24 03:57:07

Mina.Net实现的UDP协议消息收发Demo的相关文章

【转】关于TCP和UDP协议消息保护边界的介绍

在 socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有一一成对的 socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包.这样,接收端,就难于分辨出来了,必须提供科学的拆包机制.对于UDP,不会使用块的合并优化算法,这样,实际上目前认为,是由于UDP支持的是一对多的模式,所以接收端的skbuff(套接

【Java TCP/IP Socket】构建和解析自定义协议消息(含代码)

在传输消息时,用Java内置的方法和工具确实很用,如:对象序列化,RMI远程调用等.但有时候,针对要传输的特定类型的数据,实现自己的方法可能更简单.容易或有效.下面给出一个实现了自定义构建和解析协议消息的Demo(书上例子). 该例子是一个简单的投票协议.这里,一个客户端向服务器发送一个请求消息,消息中包含了一个候选人的ID,范围在0~1000.程序支持两种请求:一种是查询请求,即向服务器询问候选人当前获得的投票总数,服务器发回一个响应消息,包含了原来的候选人ID和该候选人当前获得的选票总数:另

理解TCP和UDP协议

目录 TCP 协议 UDP协议 TCP和UDP的区别 TCP和UDP的使用场景 一 TCP协议 1.TCP的头部格式 理解TCP协议,首要的就是TCP协议的头部格式 ·        Source Port和Destination Port:分别占用16位,表示源端口号和目的端口号:用于区别主机中的不同进程,而IP地址是用来区分不同的主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能唯一的确定一个TCP连接: ·        Sequence Number:用来标识从T

android实现基于TCP和UDP协议的即时通讯,含android端和服务器端

这几天学习了下在android中实现即时通讯的方法,一开始,自然是从基本的网络协议中开始尝试了,这样能够最大化的私人订制自己的应用,还能学习到更多的知识,好处多多,接下来就简单介绍下两种协议的不同点吧 TCP协议:提供IP环境下的数据可靠传输,它提供的服务包括数据流传送.可靠性.有效流控.全双工操作和多路复用.通过面向连接.端到端和可靠的数据包发送.就如给悬崖上的两人通信时,他必须先把桥建好,确认桥是没问题的情况下,才把信件交过去,以后大家每次通信时,都确认下桥没什么问题,再通过这座桥来回通信了

TCP/UDP协议

TCP/UDP协议 1.协议简介 TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议.其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送.可靠性.有效流控.全双工操作和多路复用.通过面向连接.端到端和可靠的数据包发送.通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送:而UDP则不为IP提供可靠性.流控或差错恢复功能.一般来说,TCP对应的是可靠性要求高的应用,而UDP

TCP协议与UDP协议的区别

TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! TCP/IP协议是一个协议簇.里面包括很多协议的.UDP只是其中的一个.之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了.   常用的网络协议 -UDP:概念来自于"电报"     -只管发送,不确认对方是否收到     -以数据包的形式发送,每个数据包不能

在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章?(QQ 为什么采用 UDP 协议,而不采用 TCP 协议实现?)

为了解决这题,可以具体看看下面这个讨论. 解灵运工程师 185 人赞同 某次架构师大会上那个58同城做即时通信的人说:原因是因为当时没有epoll这种可以支持成千上万tcp并发连接的技术,所以他们使用了udp,然后在udp上面封装了一下,模拟了一下tcp,解决了大并发的问题,之后因为做的很nb了,虽然epoll这种技术出现了,还是没有改回使用tcp了.现在再做类似的东西就不需要使用udp了.这个说法应该比较可信的. 发布于 2014-04-16 18 条评论 感谢 分享 收藏 • 没有帮助 • 

TCP/IP模型及TCP/UDP协议

协议:为进行网络中的数据交换(通信)而建立的规则.标准或约定.(=语义+语法+规则) TCP/IP已成为Internet上通信的工业标准. TCP/IP模型: TCP协议是一个面向连接的可靠性传输协议,在发送数据之前,先要发出连接请求,当对方监听到有请求来到时就建立连接,然后双方就可以收发消息,发送完信息后,双方就断开连接(即三次握手协议). 三次握手协议: 第一次握手: 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认:SYN:同步序列编号(Sy

UDP TCP 消息边界

先明确一个问题,如果定义了一个数据结构,大小是,比方说 32 个字节,然后 UDP 客户端连续向服务端发了两个包.现在假设这两个包都已经到达了服务器,那么服务端调用 recvfrom 来接收数据,并且缓冲区开得远大于 64,例如,开了 1024 个字节,那么,服务端的 recvfrom 函数是会一次收到两个数据包呢,还是只能收到一个. 答案是只能收到一个. 来看代码: struct.h #ifndef STRUCT_H #define STRUCT_H typedef struct _UDP_M