Mina.Net实现的断线重连
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 TCPMessageDemo
{
static string ip = "127.0.0.1";
static int port = ;
static void Main(string[] args)
{
Client();
}
static void Server()
{
var acceptor = new Mina.Transport.Socket.AsyncSocketAcceptor();
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.SessionCreated += (ss, ee) => { ee.Session.Config.SetIdleTime(IdleStatus.BothIdle, ); }; acceptor.Bind(new IPEndPoint(IPAddress.Any, port));
Console.WriteLine("linten in port " + port);
Console.ReadLine();
acceptor.Unbind();
acceptor.Dispose();
}
static void Client()
{
var connector = new Mina.Transport.Socket.AsyncSocketConnector();
connector.FilterChain.AddLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Encoding.UTF8)));
connector.MessageReceived += (ss, ee) =>//接收到消息后
{
Console.WriteLine("客户端收到" + ee.Session.RemoteEndPoint + "的消息:" + ee.Message + "");
};
connector.DefaultRemoteEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);
var session = connector.Connect().Await().Session;
connector.SessionClosed += (ss, ee) => { Console.WriteLine("SessionClosed"); };
object lastSendFaileMessage = null;//记录最近一次发送的消息,如果发送失败的情况下,下次断线重连后还可以再发。
connector.SessionDestroyed += (ss, ee) =>
{
Console.WriteLine("SessionDestroyed");
//断绝重连
while (true)
{
try
{
if (!connector.Disposed)//如果不是因为客户端执行的关闭,则进行断线重连
{
Console.WriteLine("断线得连!");
session = connector.Connect().Await().Session;
Console.WriteLine("连接成功!");
if (!string.IsNullOrWhiteSpace(lastSendFaileMessage + "")) { session.Write(lastSendFaileMessage); }
}
else lastSendFaileMessage = null;
break;
}
catch (Exception ex) { Console.WriteLine("尝试失败:" + ex.Message); Thread.Sleep(); }
}
};
while (true)
{
var line = Console.ReadLine();
if (line == "exit")
{
session.Close(true);
connector.Dispose();
}
if (session.Connected)
{
Console.WriteLine("Connected.");
if (session.Write(line).Exception != null)
{
lastSendFaileMessage = line;
}
}
else
{
Console.WriteLine("DisConnected.");
}
}
} }
}
Mina.Net实现的断线重连的更多相关文章
- Mina 断线重连
Mina 断线重连 定义:这里讨论的Mina 断线重连是指使用mina作为客户端软件,连接其他提供Socket通讯服务的服务器端.Socket服务器可以是Mina提供的服务器,也可以是C++提供的服务 ...
- 关于socket tcp 断线重连
这个问题困扰过我几次,都没有来得及研究,今天研究一下. 首先写一个最简易的socket tcp程序,连接成功后再关闭服务器然后再用客户端各种操作看是什么情况 测试表明 (1)客户端已经连接,当服务端关 ...
- netty4 断线重连
转载:http://www.tuicool.com/articles/B7RzMbY 一 实现心跳检测 原理:当服务端每隔一段时间就会向客户端发送心跳包,客户端收到心跳包后同样也会回一个心跳包给服务端 ...
- Netty 客户端断线重连
client 关闭后会执行 finally 代码块,可以在这里可以进行重连操作 public class NettyClient implements Runnable { private final ...
- ActiveMQ的断线重连机制
断线重连机制是ActiveMQ的高可用性具体体现之一.ActiveMQ提供failover机制去实现断线重连的高可用性,可以使得连接断开之后,不断的重试连接到一个或多个brokerURL. 默认情况下 ...
- ADOConnection断线重连
问题: ADOConnection断线重连问题描述: 使用ADOConnection连接oracle数据库,开始正常,当网络断开时数据库连接失败(此时查询ADOConnection.connected ...
- 发现电脑上装着liteide,就用golang做一个TCP通讯测试(支持先启动client端和断线重连)
1.参考https://www.cnblogs.com/yin5th/p/9274495.html server端 main.go package main import ( "fmt&qu ...
- Netty断线重连
Netty断线重连 最近使用Netty开发一个中转服务,需要一直保持与Server端的连接,网络中断后需要可以自动重连,查询官网资料,实现方案很简单,核心思想是在channelUnregistered ...
- 浅谈IM软件client的断线重连、心跳和长在线
版权声明:原创文章,未经博主同意禁止转载.欢迎点击头像上方"郭晓东的专栏"查看专栏 https://blog.csdn.net/hherima/article/details/27 ...
随机推荐
- ExtJS学习-----------Ext.Array,ExtJS对javascript中的Array的扩展(实例)
(1)clean var arr = [1,2,null,3,'']; alert(Ext.Array.clean(arr)); //clean的对象:(value === null) || (val ...
- IP视频通信中的"丢包恢复技术”(LPR)
转自:http://blog.csdn.net/blade2001/article/details/9094709 在IP视频通话中,即使是在丢包率很小的情况下也会对使用效果造成较为明显的影响.正是由 ...
- 常见排序的JAVA实现和性能测试
五种常见的排序算法实现 算法描述 1.插入排序 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元素(已排序)大于新元素,将该元素移到下一位置 重 ...
- 混乱之子第一季/全集Sons Of Anarchy迅雷下载
本季第一至六季 Sons of Anarchy (2008-2013)看点:<混乱之子>发生在一个虚构的加州小镇(Charming)上,面对毒品贩子和大型土地开发商的步步紧逼,一家黑白两道 ...
- mysql update select
根据文件名 更新外键ID UPDATE tb_obj INNER JOIN tb_img ON tb_img.filename=tb_obj.filename SET tb_objinfo.img ...
- 优化算法动画演示Alec Radford's animations for optimization algorithms
Alec Radford has created some great animations comparing optimization algorithms SGD, Momentum, NAG, ...
- hive php连接查询
baidu hive php PHP连接Hive执行sql查询 php通过 thrift访问hadoop的hive php开发Hive Web查询 php连接hive执行sql查询 利用python将 ...
- smb与samba
为了使Windows 主机间的资源能够共享,微软于1980年开发了SMB(Server Message Block)通信协议,并通过SMB通信协议,使网络上各台主机之间能够共享文件.打印机等资源.目前 ...
- sqlserver 临时表、表变量、CTE的比较
原文地址: sqlserver 临时表.表变量.CTE的比较 1.临时表 1.1 临时表包括:以#开头的局部临时表,以##开头的全局临时表. 1.2 存储 不管是局部临时表,还是全局临时表,都会放存 ...
- CSS框架BluePrint
做惯了后台程序的我们,是否对前端编程有兴趣么,通过CSS框架,使我们很容易的开发出基于Div+CSS布局的页面来,今天让我们了解下大名鼎鼎的blueprint CSS框架吧! 它的官方网站:http: ...