public static void TCP_结束符() { Console.WriteLine("创建服务器"); var __服务器 = FN网络传输工厂.创建TCP服务器(new IPEndPoint(IPAddress.Any, 9000), new List <byte[]> { Encoding.UTF8.GetBytes("\0") }); __服务器.称 = "服务器"; __服务器.收到消息 += __服务器.步发送; __服务器.客户端已连接 += q => Console.WriteLine("服务器: 客户端已连接 " + q.ToString()); __服务器.客户端已断开 += q => Console.WriteLine("服务器: 客户端已断开 " + q.ToString()); __服务器.开启(); Console.WriteLine("创建客户端"); var __客户端 = FN网络传输工厂.创建TCP客户端(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9000), new IPEndPoint(IPAddress.Any, 0), new List <byte[]> { Encoding.UTF8.GetBytes("\0") }); __客户端.称 = "客户端"; __客户端.收到消息 += (__远端, __消息) => Console.WriteLine("客户端: 收到报文 " + BitConverter.ToString(__消息)); __客户端.已断开 += () => Console.WriteLine("客户端: 服务器已断开"); __客户端.开启(); __客户端.步发送(Encoding.UTF8.GetBytes("hello world!\0")); __客户端.步发送(Encoding.UTF8.GetBytes("hello wk!\0")); Thread.Sleep(2000); Console.WriteLine("按回车键结束"); Console.ReadLine(); __客户端.关闭(); __服务器.关闭(); }
public static void TCP_消息头() { Console.WriteLine("创建服务器"); var __消息头长度 = 6; var __服务器 = FN网络传输工厂.创建TCP服务器(new IPEndPoint(IPAddress.Any, 9000), __消息头长度, 解码消息长度); __服务器.称 = "服务器"; __服务器.收到消息 += __服务器.步发送; __服务器.客户端已连接 += q => Console.WriteLine("服务器: 客户端已连接 " + q.ToString()); __服务器.客户端已断开 += q => Console.WriteLine("服务器: 客户端已断开 " + q.ToString()); __服务器.开启(); Console.WriteLine("创建客户端"); var __客户端 = FN网络传输工厂.创建TCP客户端(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9000), new IPEndPoint(IPAddress.Any, 0), __消息头长度, 解码消息长度); __客户端.称 = "客户端"; __客户端.收到消息 += (__远端, __消息) => Console.WriteLine("客户端: 收到报文 " + BitConverter.ToString(__消息)); __客户端.已断开 += () => Console.WriteLine("客户端: 服务器已断开"); __客户端.开启(); __客户端.步发送(new byte[] { 0xAA, 0xAA, 0x00, 0x00, 0x00, 0x01, 0x8 }); __客户端.步发送(new byte[] { 0xAA, 0xAA, 0x00, 0x00, 0x00, 0x02, 0x8, 0x09 }); Thread.Sleep(2000); Console.WriteLine("按回车键结束"); __客户端.关闭(); __服务器.关闭(); Console.ReadLine(); }
public void 开启() { var __编解码器 = new B编解码器(H报文注册.报文字典, null, FT通用访问工厂.文本编码) { 编码拦截 = H报文注册.拦截发送报文, 解码拦截 = H报文注册.拦截接收报文 }; 客户端列表 = new List <IPEndPoint>(); _IN网络节点 = FN网络传输工厂.创建TCP服务器(new IPEndPoint(IPAddress.Any, 端口), __编解码器.消息头长度, __编解码器.解码消息长度); _IN网络节点.称 = "服务器"; _IN上下文 = new N上下文(__编解码器, _IN网络节点.称); _IN网络节点.收到消息 += (__远端地址, __消息) => _IN上下文.收到报文(__远端地址, __消息); _IN网络节点.客户端已连接 += q => { if (!客户端列表.Contains(q)) { 客户端列表.Add(q); } On客户端已连接(q); }; _IN网络节点.客户端已断开 += q => { if (客户端列表.Contains(q)) { 客户端列表.Remove(q); } On客户端已断开(q); _IN上下文.注销节点(q); }; _IN上下文.设置发送方法(_IN网络节点.步发送); _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M对象列表查询请求)), () => new N被动会话(new Func <N会话参数, bool>(处理查询对象列表))); _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M对象明细查询请求)), () => new N被动会话(new Func <N会话参数, bool>(处理查询对象明细))); _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M方法执行请求)), () => new N被动会话(new Func <N会话参数, bool>((处理执行方法)))); _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M订阅事件)), () => new N被动会话(new Action <N会话参数>((处理订阅事件)))); _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M注销事件)), () => new N被动会话(new Action <N会话参数>((处理取消订阅事件)))); _IN上下文.订阅报文(H报文注册.查询功能码(typeof(M属性值查询请求)), () => new N被动会话(new Func <N会话参数, bool>((处理查询属性值)))); _IN网络节点.最大消息长度 = 10000000; _IN网络节点.开启(); try { if (WebApi端口 == 0) { WebApi端口 = 端口 + 1; } _BWebApi = new BWebApi(WebApi端口, () => _所有对象); _BWebApi.开启(); } catch (Exception ex) { H日志输出.记录("通用访问WebApi开启失败: " + ex.Message); } }
public static void TCP_消息头() { //三种内置的简单的编码器, 另外一种内置编码器需要报文(业务对象)实现'IN可编码'/'IN可解码' //var __编解码器 = new N自描述编解码(null); //var __编解码器 = new NJson自描述编解码(null); var __报文字典 = new Dictionary <Int16, Type> { { 0, typeof(M心跳) }, { 1, typeof(M注册请求) }, { 2, typeof(M注册成功) }, { 3, typeof(M注册失败) }, }; var __编解码器 = new NJson通用编解码(__报文字典, null); Console.WriteLine("创建服务器"); var __服务器 = FN网络传输工厂.创建TCP服务器(new IPEndPoint(IPAddress.Any, 9000), __编解码器.消息头长度, __编解码器.解码消息长度); __服务器.称 = "服务器"; var __服务器上下文 = new N上下文(__编解码器, __服务器.称); __服务器.收到消息 += __服务器上下文.收到报文; __服务器.客户端已连接 += q => Console.WriteLine("服务器: 与客户端连接 " + q.ToString()); __服务器.客户端已断开 += q => { __服务器上下文.注销节点(q); Console.WriteLine("服务器: 与客户端断开 " + q.ToString()); }; Console.WriteLine("配置服务器上下文"); __服务器上下文.设置发送方法(__服务器.步发送); __服务器上下文.订阅报文(__编解码器.获取功能码(typeof(M注册请求)), () => new N被动会话(__会话参数 => { var __注册请求 = __会话参数.负载 as M注册请求; Console.WriteLine("服务器: 客户端请求注册 " + __会话参数.远端.ToString()); //验证账号 Console.WriteLine("服务器: 验证账号 " + string.Format("账号:{0}; 密码: {1}", __注册请求.账号, __注册请求.密码)); //验证成功 Console.WriteLine("服务器: 验证通过"); __会话参数.发送响应(new M注册成功 { 角色 = 0 }); //心跳 Console.WriteLine("服务器: 开启心跳任务"); Task.Factory.StartNew(() => { Thread.Sleep(2000); while (true) { __会话参数.发送通知(new M心跳()); Thread.Sleep(5000); } }); return(true); })); __服务器上下文.订阅报文(__编解码器.获取功能码(typeof(M心跳)), () => new N被动会话(__会话参数 => Console.WriteLine("服务器: 收到心跳 " + __会话参数.远端.ToString()))); __服务器.开启(); Console.WriteLine("创建客户端"); var __服务器节点 = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9000); var __客户端 = FN网络传输工厂.创建TCP客户端(__服务器节点, new IPEndPoint(IPAddress.Any, 5555), __编解码器.消息头长度, __编解码器.解码消息长度); __客户端.称 = "客户端"; //__客户端.自动重连 = true; var __客户端上下文 = new N上下文(__编解码器, __客户端.称); __客户端.收到消息 += __客户端上下文.收到报文; __客户端.已断开 += () => { __客户端上下文.注销节点(__服务器节点); Console.WriteLine("客户端: 与服务器断开"); }; Console.WriteLine("配置客户端上下文"); __客户端上下文.设置发送方法((__节点, __消息) => __客户端.步发送(__消息)); __客户端上下文.订阅报文(__编解码器.获取功能码(typeof(M心跳)), () => new N被动会话(__会话参数 => Console.WriteLine("客户端: 收到心跳 " + __会话参数.远端.ToString()))); __客户端.开启(); Console.WriteLine("开始交互"); var __客户端会话 = new N主动会话(__客户端上下文, __服务器节点); var __完成 = __客户端会话.请求(new M注册请求 { 账号 = "account", 密码 = "password" }, __会话参数 => { var __注册成功 = __会话参数.负载 as M注册成功; if (__注册成功 != null) { //验证成功 Console.WriteLine("客户端: 注册成功"); //心跳 Console.WriteLine("客户端: 开启心跳任务"); Task.Factory.StartNew(() => { Thread.Sleep(2000); while (true) { try { __客户端会话.通知(new M心跳()); Thread.Sleep(5000); } catch (Exception) { break; } } }); return(true); } var __注册失败 = __会话参数.负载 as M注册失败; if (__注册失败 != null) { Console.WriteLine("客户端: 注册失败"); return(true); } return(false); }); if (!__完成) { Console.WriteLine("客户端: 服务器未响应"); } Thread.Sleep(10000); __客户端.断开(); //Thread.Sleep(1000); //等待对方超时释放 //__客户端.手动重连(10, 1000); //关闭 Thread.Sleep(3000); Console.WriteLine("关闭"); __客户端.关闭(); __服务器.关闭(); Console.WriteLine("按回车键结束"); Console.ReadLine(); }
public static void TCP_消息头() { var __编解码器 = new N通用编解码(_报文字典, null); Console.WriteLine("创建服务器"); var __服务器 = FN网络传输工厂.创建TCP服务器(new IPEndPoint(IPAddress.Any, 9000), __编解码器.消息头长度, __编解码器.解码消息长度); __服务器.称 = "服务器"; var __服务器上下文 = new N上下文(__编解码器, __服务器.称); __服务器.收到消息 += __服务器上下文.收到报文; __服务器.客户端已连接 += q => Console.WriteLine("服务器: 与客户端连接 " + q.ToString()); __服务器.客户端已断开 += q => { __服务器上下文.注销节点(q); Console.WriteLine("服务器: 与客户端断开 " + q.ToString()); }; Console.WriteLine("配置服务器上下文"); __服务器上下文.设置发送方法(__服务器.步发送); __服务器上下文.订阅报文(typeof(M注册请求).FullName, () => new B处理注册S()); __服务器上下文.订阅报文(typeof(M心跳).FullName, () => new B处理心跳S()); __服务器.开启(); Console.WriteLine("创建客户端"); var __服务器节点 = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9000); var __客户端 = FN网络传输工厂.创建TCP客户端(__服务器节点, new IPEndPoint(IPAddress.Any, 5555), __编解码器.消息头长度, __编解码器.解码消息长度); __客户端.称 = "客户端"; //__客户端.自动重连 = true; var __客户端上下文 = new N上下文(__编解码器, __客户端.称); __客户端.收到消息 += __客户端上下文.收到报文; __客户端.已断开 += () => { __客户端上下文.注销节点(__服务器节点); Console.WriteLine("客户端: 与服务器断开"); }; Console.WriteLine("配置客户端上下文"); __客户端上下文.设置发送方法((__节点, __消息) => __客户端.步发送(__消息)); __客户端上下文.订阅报文(typeof(M心跳).FullName, () => new B处理心跳C()); __客户端.开启(); Console.WriteLine("开始交互"); ////原始方式 //var __客户端注册 = new B处理注册C(); //__客户端注册.开启请求(__服务器节点, new M注册请求 { 用户名 = "account", 密码 = "password" }, __客户端上下文); //简易方式 var __主动会话 = new N主动会话(__客户端上下文, __服务器节点); var __完成 = __主动会话.请求(new M注册请求 { 用户名 = "account", 密码 = "password" }, __会话参数 => { var __注册报文S = (M注册响应)__会话参数.负载; if (__注册报文S != null) { //验证账号 if (!__注册报文S.验证通过) { Console.WriteLine("客户端: 注册失败"); } else { //验证成功 Console.WriteLine("客户端: 注册成功"); //心跳 Console.WriteLine("客户端: 开启心跳任务"); Task.Factory.StartNew(() => { Thread.Sleep(2000); while (true) { __主动会话.通知(new M心跳()); Thread.Sleep(5000); } }); } return(true); } return(false); }); if (!__完成) { Console.WriteLine("客户端: 服务器未响应"); } Thread.Sleep(3000); __客户端.断开(); //Thread.Sleep(1000); //等待对方超时释放 //__客户端.手动重连(10, 1000); //关闭 Thread.Sleep(10000); Console.WriteLine("关闭"); __客户端.关闭(); __服务器.关闭(); Console.WriteLine("按回车键结束"); Console.ReadLine(); }