当前位置: 首页 > wzjs >正文

阳泉营销型网站建设seo网站关键词优化快速官网

阳泉营销型网站建设,seo网站关键词优化快速官网,做的好的茶叶网站,海口网红店C#TCP通讯封装服务器工具类 1使用说明2封装 1使用说明 添加接受数据回调函数事件 方式1&#xff1a;通过有参构造函数添加 方式2&#xff1a;调用&#xff1a;public EventHandler<byte[]> AddEventToDataReceived 添加输出日志回调函数事件 方式1&#xff1a;通过有参构…

C#TCP通讯封装服务器工具类

  • 1使用说明
  • 2封装

1使用说明

  • 添加接受数据回调函数事件

方式1:通过有参构造函数添加
方式2:调用:public EventHandler<byte[]> AddEventToDataReceived

  • 添加输出日志回调函数事件

方式1:通过有参构造函数添加
方式2:调用:public Action<EMessage, IPEndPoint, int, string> AddEventToOutLog

  • 监听客户端发送数据线程向其他客户端转发消息的数据如何输出日志信息

方式:设置属性【OutputReceivedLog 】、设置属性【OutputReplyLog】
类型:

Null :不输出
Length:仅输出接受数据的长度信息
UTF8:UTF8-解析输出
ASCII:ASCII-解析输出
ByteToString:输出字节的字符串形式

2封装

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace Tcp_Server
{public class ServerModel{private bool _firstStartServer = true;private TcpListener _server;private List<TcpClient> _tcpClientsList = new List<TcpClient>();/// <summary>/// 接受消息回调函数/// </summary>private EventHandler<byte[]> _callbackEventDataReceived;/// <summary>/// 日志信息回调函数/// int:线程ID/// </summary>private Action<EMessage, IPEndPoint, int, string> _callbackEventOutLog;public ServerModel(EventHandler<byte[]> callbackEventDataReceived, Action<EMessage, IPEndPoint, int, string> callbackEventOutLog){AddEventToDataReceived = callbackEventDataReceived;AddEventToOutLog = callbackEventOutLog;}public ServerModel(){}~ServerModel(){CloseServer();}/// <summary>/// 监听接入客户端/// </summary>private void ListeningClient(){TcpClient client = null;try{//等待客户端连接client = _server.AcceptTcpClient();AddLog(client, EMessage.State, "已连接");//为(每个)客户端创建线程处理通信new Task(() => HandleClient(client)).Start();}catch (Exception ex){AddLog(client, EMessage.Exception, $"ListeningClient: {ex.Message}");}}private void HandleClient(TcpClient client){try{NetworkStream stream = client.GetStream();_tcpClientsList.Add(client);byte[] buffer = new byte[1024];while (IsOpen){// 异步读取客户端发送的消息int bytesRead = stream.Read(buffer, 0, buffer.Length);if (bytesRead == 0){// 客户端断开连接break;}var receive = new byte[bytesRead];Array.Copy(buffer, receive, bytesRead);_callbackEventDataReceived?.Invoke(null, receive);PacketParseLog(EMessage.Receive, OutputReceivedLog, client, receive);//转发消息给其他客户端BroadcastMessage(client, buffer);}}catch (Exception ex){AddLog(client, EMessage.Exception, $"HandleClient: {ex.Message}");}}private void BroadcastMessage(TcpClient sender, byte[] buffer){int length = buffer.Length;foreach (TcpClient client in _tcpClientsList){if (client != sender && client.Connected){try{NetworkStream stream = client.GetStream();stream.Write(buffer, 0, length);PacketParseLog(EMessage.Reply, OutputReplyLog, client, buffer);}catch (Exception ex){AddLog(client, EMessage.Exception, $"BroadcastMessage: {ex.Message}");}}}}/// <summary>/// 解析数据包输出至日志/// </summary>/// <param name="messageType"></param>/// <param name="type"></param>/// <param name="client"></param>/// <param name="bytes"></param>private void PacketParseLog(EMessage messageType, ETranscoding type, TcpClient client, byte[] bytes){string message;switch (type){case ETranscoding.Length:message = bytes.Length.ToString();break;case ETranscoding.UTF8:message = Encoding.UTF8.GetString(bytes);break;case ETranscoding.ASCII:message = Encoding.ASCII.GetString(bytes);break;case ETranscoding.ByteToString:var builder = new StringBuilder();builder.Append("[ ");foreach (var b in bytes){builder.Append(Convert.ToString(b, 16).PadLeft(2, '0').ToUpper() + " ");}builder.Append("]");message = builder.ToString();break;default:return;}AddLog(client, messageType, message);}private void AddLog(TcpClient client, EMessage type, string description){int threadId = Thread.CurrentThread.ManagedThreadId;IPEndPoint ipEndPoint;if (client != null){ipEndPoint = (IPEndPoint)client.Client.RemoteEndPoint;}else{ipEndPoint = (IPEndPoint)_server.LocalEndpoint;}_callbackEventOutLog?.Invoke(type, ipEndPoint, threadId, description);}/********隔离线********隔离线********隔离线********隔离线********隔离线********隔离线********隔离线********/public EventHandler<byte[]> AddEventToDataReceived{set{if (value != null) _callbackEventDataReceived += value;}}public Action<EMessage, IPEndPoint, int, string> AddEventToOutLog{set{if (value != null) _callbackEventOutLog += value;}}/// <summary>/// 接受到客户端数据时输出日志信息的方式,默认:不输出/// </summary>public ETranscoding OutputReceivedLog { get; set; } = ETranscoding.Null;/// <summary>/// 转发消息Log时数据解析方式/// </summary>public ETranscoding OutputReplyLog { get; set; } = ETranscoding.Null;public bool StartServer(string ip, int port){try{CloseServer();//创建一个 TCP 监听器,监听本地 IP 地址和端口_server = new TcpListener(IPAddress.Parse(ip), port);// 启动服务器_server.Start();AddLog(null, EMessage.State, "服务器已启动");IsOpen = true;if (_firstStartServer){_firstStartServer = false;new Task(() =>{while (IsOpen){Thread.Sleep(1000);ListeningClient();}}).Start();}}catch (Exception ex){AddLog(null, EMessage.Exception, $"StartServer: {ex.Message}");}return IsOpen;}public void CloseServer(){if (IsOpen){// 停止服务器_server.Stop();}IsOpen = false;_server = null;}public bool IsOpen { get; private set; }public enum EMessage{[Description("状态信息")]State = 1,[Description("发送")]Send = 3,[Description("接受")]Receive = 5,[Description("异常")]Exception = 7,[Description("回复")]Reply = 9,}/// <summary>/// 接受到客户端数据时字节码解析方式,解析后输出至日志/// </summary>public enum ETranscoding{/// <summary>/// 不输出/// </summary>Null = 101,/// <summary>/// 仅输出接受数据的长度信息/// </summary>Length,/// <summary>/// UTF8-解析输出/// </summary>UTF8,/// <summary>/// ASCII-解析输出/// </summary>ASCII,/// <summary>/// 输出字节的字符串形式/// </summary>ByteToString}}
}
http://www.dtcms.com/wzjs/419366.html

相关文章:

  • 建网站一般要多少钱百度网页pc版登录
  • dedecms 网站名称上海seo优化公司bwyseo
  • 中山seo建站网站制作免费
  • 郑州关键词网站优化排名电脑优化工具
  • 广州做网站好的公司泸州网站优化推广
  • 怎么建立公司网站?谷歌商店paypal官网下载
  • 电子商务网站的建设包含哪些流程自建站平台
  • 南京广告设计制作公司seo关键词优化策略
  • 个人备案 做网站网络推广员好做吗
  • 管理网站模板下载惠州seo公司
  • 昆山做网站找哪家好搜索排名优化软件
  • 网站建设-设计宣传推广方案范文
  • 四川省建设厅安全员报名网站免费二级域名平台
  • 免费网站建设哪家好企业线上培训课程
  • 百度一下浏览器seo技术培训岳阳
  • 浙江省住房城乡建设厅官方网站线在成都网站推广公司
  • ps如何做ppt模板下载网站百度移动端排名
  • 门户网站登录入口网站竞价推广托管公司
  • 网站怎么做自响应怎么做网页宣传
  • 南充网站开发什么叫seo
  • 国外网站配色营销系统
  • 1000元做网站硬件工程师培训机构哪家好
  • 网站装修怎么做seo优化资源
  • 做网上购物网站重庆seo网络营销
  • 苹果手机做电影网站百度指数对比
  • 自己做网站是不是需要写代码无锡百度公司代理商
  • 做爰全过程免费的教网站无锡网站关键词推广
  • 大兴模版网站建设哪家好百度关键词收费标准
  • 做外贸怎样上外国网站搜狗关键词排名此会zjkwlgs
  • 网页设计作业制作个人网站保定百度推广联系电话