pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

C#開源類庫SimpleTCP使用方法

SimpleTCP內部有一個特殊字符分割字符串的協議可以直接使用,也可以在DataReceived事件處理程序中實現自己的協議,這篇文章主要介紹了C#開源類庫SimpleTCP的使用方法,需要的朋友可以參考

簡介

工作中經常遇到需要實現TCP客戶端或服務端的時候,如果每次都自己寫會很麻煩且無聊,使用SuperSocket庫又太大了。這時候就可以使用SimpleTCP了,當然僅限于C#語言。

SimpleTCP是一個簡單且非常有用的 .NET 庫,用于處理啟動和使用 TCP 套接字(客戶端和服務器)的重復性任務,使用起來非常方便、代碼也少。它的內部不是直接使用的Socket,而是在TcpClient的基礎上進行了再次封裝,接口更簡單、明了。

它的主要特點如下:

  • 源碼簡單:源碼就幾個類,每個類也不大,在了解TcpClient用法的基礎上不需要注釋就可以看懂。
  • 功能單一:不像其它庫一樣功能繁多,它只專注于實現簡單的TCP客戶端、服務端,使用起來不用擔心增加系統的復雜性。
  • 使用簡單:后面的示例會具體講解,啟動一個客戶端或服務端只需要幾行代碼,想擴展功能也很簡單。

說一下它的不足之處(在我看來完全可以接受):

  • 已停止更新:最后更新時間是2017年,不過庫的功能比較簡單、單一,也沒那么多更新的內容。
  • 性能不是最優的:底層是基于TcpClient的,性能注定不會太高,但能用TcpClient的地方都可以用它。

使用方法

在項目中直接引用SimpleTCP.dll即可, dll文件可以通過NuGet安裝或從github下載源碼編譯。
SimpleTCP內部有一個特殊字符分割字符串的協議可以直接使用,也可以在DataReceived事件處理程序中實現自己的協議。

實現客戶端

實現一個客戶端的代碼如下:


//初始化
var client = new SimpleTcpClient();            

//設置編碼格式,默認是UTF8
client.StringEncoder = System.Text.ASCIIEncoding.ASCII;
//設置分隔符,默認是0x13
client.Delimiter = Encoding.ASCII.GetBytes("\r")[0];

//收到分割數據的事件,遇到分隔符就會觸發事件
client.DelimiterDataReceived += (sender, msg) => 
{
    Console.WriteLine("DelimiterStr-"+DateTime.Now.ToString()+ msg.MessageString);
};

//收到數據的事件,可以在這里實現自己的協議
client.DataReceived += (sender, msg) => 
{
    //字節數組
    Console.WriteLine("Data:"+BitConverter.ToString(msg.Data));
    //字符串消息
    Console.WriteLine("ReceivedStr:" + msg.MessageString);
};

DelimiterDataReceived和DataReceived內部使用了兩個不同的字節鏈表,解析起來互不影響。這兩個事件的處理程序中盡量不要做耗時的操作,否則會影響后續的數據接收。

SimpleTCP沒有心跳、重連功能,也沒找到反饋客戶端連接狀態的屬性(不建議使用內部TcpClient的連接狀態)。我們可以直接擴展這些功能,代碼如下:


bool exit = false;
bool connected = false;
Task.Factory.StartNew(() => 
{
    while (!exit) 
    {
        try
        {
            if (connected)
            {
                //發送心跳
                client.Write("");
                Task.Delay(10000).Wait();
            }
            else
            {
                //斷線重連
                client.Connect("127.0.0.1", 4196);
                connected = true;
                Task.Delay(1000).Wait();
            }
        }
        catch (Exception)
        {
            connected = false;
            client.Disconnect();
        }
    }               
    
}, TaskCreationOptions.LongRunning);

把上面的代碼按順序復制到控制臺的Main函數中,然后加入下面的代碼就可以收發數據了:


while (true) 
{
    string strLine = Console.ReadLine();
    if (strLine == "esc") 
    {
        exit = true;
        client.Disconnect();
        return;
    }
    if (connected) 
    { 
        //獲取服務端回復的消息,最多等待3秒,收到消息時會提前返回
        //也可以使用Write、WriteLine方法發送數據,WriteLine會自動在后面加上設置的分隔符
        var replyMsg = client.WriteLineAndGetReply(strLine, TimeSpan.FromSeconds(3));
        if (replyMsg != null) 
        {
            Console.WriteLine(replyMsg);
        }
    }
}

注:WriteLineAndGetReply內部使用的是DataReceived,不會自動去除分隔符。

實現服務端

服務端功能比較簡單,把收到分割數據加工后返回客戶端,代碼如下:


//初始化
var server = new SimpleTcpServer();
//設置編碼格式,默認是UTF8
server.StringEncoder = System.Text.ASCIIEncoding.ASCII;
server.Delimiter =  Encoding.ASCII.GetBytes("\r")[0];

//分割數據接收事件
server.DelimiterDataReceived += (sender, msg) => 
{
    Console.WriteLine(msg.TcpClient.Client.RemoteEndPoint.ToString()+":" + msg.MessageString);
    msg.ReplyLine("Reply-" + msg.MessageString);
};

//數據接收數據
server.DataReceived += (sender, msg) =>
{
    Console.WriteLine(msg.TcpClient.Client.RemoteEndPoint.ToString() + ":" + msg.MessageString);
};

//客戶端連接事件
server.ClientConnected += (sender, msg) => 
{
    Console.WriteLine("ClientConnected:" + msg.Client.RemoteEndPoint.ToString());
};

//客戶端斷開事件
server.ClientDisconnected += (sender, msg) =>
{
    Console.WriteLine("ClientDisconnected:" + msg.Client.RemoteEndPoint.ToString());
};

//開始監聽
server.Start(4196);
//監聽的IP
var listeningIps = server.GetListeningIPs();
//監聽的V4Ip
var listeningV4Ips = server.GetListeningIPs().Where(ip => ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork);



Task.Factory.StartNew(() =>
{
    while (true)
    {   
        //連接數監控
        int clientsConnected = server.ConnectedClientsCount;
        Console.WriteLine("當前連接的客戶端數:" + clientsConnected);
        Task.Delay(10000).Wait();
    }

}, TaskCreationOptions.LongRunning);            
Console.ReadLine();

//停止監聽
server.Stop();
Console.WriteLine("停止服務端!");
Console.ReadLine();

總結

上面的代碼主要為了展示庫的功能,實際使用時可能就幾行代碼,性能要求不高的項目都可以使用。

項目和庫的源碼鏈接如下:

鏈接: https://pan.baidu.com/s/1NgW4CQsU-1BJGgJHg8X2Fg 提取碼: 7vgf

鏈接: https://pan.baidu.com/s/1_2Gr83mkygHdN6B3KIx56w 提取碼: 5kdh

到此這篇關于C#開源類庫SimpleTCP的文章就介紹到這了,更多相關C#開源類庫內容請搜索html5模板網以前的文章希望大家以后多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

主站蜘蛛池模板: 壹车网 | 第一时间提供新车_资讯_报价_图片_排行! | 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 智慧农业|农业物联网|现代农业物联网-托普云农物联网官方网站 | 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 | 北京发电车出租-发电机租赁公司-柴油发电机厂家 - 北京明旺盛安机电设备有限公司 | 识禅_对禅的了解,从这里开始 | 培训中心-海南香蕉蛋糕加盟店技术翰香原中心官网总部 | 重庆监控_电子围栏设备安装公司_门禁停车场管理系统-劲浪科技公司 | 扬尘在线监测系统_工地噪声扬尘检测仪_扬尘监测系统_贝塔射线扬尘监测设备「风途物联网科技」 | 镀锌方管,无缝方管,伸缩套管,方矩管_山东重鑫致胜金属制品有限公司 | 真空乳化机-灌装封尾机-首页-温州精灌 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | 带式过滤机厂家_价格_型号规格参数-江西核威环保科技有限公司 | 超声波焊接机_超音波熔接机_超声波塑焊机十大品牌_塑料超声波焊接设备厂家 | 电池高低温试验箱-气态冲击箱-双层电池防爆箱|简户百科 | 达利园物流科技集团- | 深圳公司注册-工商注册代理-注册公司流程和费用_护航财税 | 对辊破碎机_四辊破碎机_双齿辊破碎机_华盛铭重工 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | 润东方环保空调,冷风机,厂房车间降温设备-20年深圳环保空调生产厂家 | 水质监测站_水质在线分析仪_水质自动监测系统_多参数水质在线监测仪_水质传感器-山东万象环境科技有限公司 | 杭州实验室尾气处理_实验台_实验室家具_杭州秋叶实验设备有限公司 | 丁基胶边来料加工,医用活塞边角料加工,异戊二烯橡胶边来料加工-河北盛唐橡胶制品有限公司 | 订做不锈钢_不锈钢定做加工厂_不锈钢非标定制-重庆侨峰金属加工厂 | 缓蚀除垢剂_循环水阻垢剂_反渗透锅炉阻垢剂_有机硫化物-郑州威大水处理材料有限公司 | 上海APP开发-APP制作-APP定制开发-上海APP开发制作公司-咏熠科技 | 金属检测机_金属分离器_检针验针机_食品药品金属检探测仪器-广东善安科技 | 数字展示在线_数字展示行业门户网站| 通风气楼_通风天窗_屋顶风机-山东美创通风设备有限公司 | 河南新乡德诚生产厂家主营震动筛,振动筛设备,筛机,塑料震动筛选机 | 电镀电源整流器_高频电解电源_单脉双脉冲电源 - 东阳市旭东电子科技 | 防堵吹扫装置-防堵风压测量装置-电动操作显示器-兴洲仪器 | 带式压滤机_污泥压滤机_污泥脱水机_带式过滤机_带式压滤机厂家-河南恒磊环保设备有限公司 | 电机铸铝配件_汽车压铸铝合金件_发动机压铸件_青岛颖圣赫机械有限公司 | 全自动实验室洗瓶机,移液管|培养皿|进样瓶清洗机,清洗剂-广州摩特伟希尔机械设备有限责任公司 | 陕西华春网络科技股份有限公司 | 辐射色度计-字符亮度测试-反射式膜厚仪-苏州瑞格谱光电科技有限公司 | 空压机网_《压缩机》杂志|