
Nuget:XiaoFeng.Net
| QQ群號 | QQ群 | 公眾號 |
|---|---|---|
| 748408911 | ![]() | ![]() |
源碼: https://github.com/zhuovi/XiaoFeng.Net
教程: https://www.yuque.com/fayelf/xiaofeng
XiaoFeng網絡庫,封裝了Socket客戶端,服務端,根據當前庫可輕鬆實現訂閱,發布等功能。
XiaoFeng.Net generator with XiaoFeng.Net.
.NET CLI
$ dotnet add package XiaoFeng.Net --version 3.1.5
Package Manager
PM> Install-Package XiaoFeng.Net --Version 3.1.5
PackageReference
<PackageReference Include="XiaoFeng.Net" Version="3.1.5" />
Paket CLI
> paket add XiaoFeng.Net --version 3.1.5
Script & Interactive
> #r "nuget: XiaoFeng.Net, 3.1.5"
Cake
// Install XiaoFeng.Net as a Cake Addin
#addin nuget:?package=XiaoFeng.Net&version=3.1.5
// Install XiaoFeng.Net as a Cake Tool
#tool nuget:?package=XiaoFeng.Net&version=3.1.5
1.修復SocketClient連接DNS時的bug;
1.優化SocketClient中NetworkDelay最小值及最大值的判斷;
2.優化SocketClient中連接host為IP的bug;
3.優化XiaoFeng.Net.WebSocketClient請求頭;
4.優化網絡客戶端;
1.優化網絡延時時服務端接收websocket客戶端時偶爾拒絕連接的bug
2.SocketServer,SocketClient增加NetworkDelay網絡延時屬性;
3.優化SocketServer中的AcceptTcpClient方法;
1.優化SocketClient,在websocket客戶端未解包的Bug;
2.優化SocketClient第一次連接只調用OnMessage事件未調用OnMessageByte事件的Bug;
3.SocketClient增加LastMessageTime最後通訊時間,ConnectedTime連接時間;
4.優化識別客戶端是WebSocket還是Socket;
5.SocketClient連接方法增加返回類型;
1.修復postman在ssl下,一直發送消息服務端不能收到的問題;
1.增加WebSocketClient中屬性WebSocketRequest為客戶端請求信息;
2.WebSocketClient增加啟動傳參數據WebSocketRequestOptions;
3.優化Socket網絡庫註釋;
4.修復SocketServer每次收到消息都發送一次新連接回調的bug;
1.重新寫Socket庫,SocketServer,WebSocketServer,SocketClient,WebSocketClient;
| 命名空間 | 所屬類庫 | 開源狀態 | 說明 | 包含功能 |
|---|---|---|---|---|
| XiaoFeng.Prototype | XiaoFeng.Core | 擴展庫 | ToCase 類型轉換 ToTimestamp,ToTimestamps 時間轉時間戳 GetBasePath 獲取文件絕對路徑,支持Linux,Windows GetFileName 獲取文件名稱 GetMatch,GetMatches,GetMatchs,IsMatch,ReplacePatten,RemovePattern 正則表達式操作 | |
| XiaoFeng.Net | XiaoFeng.Net | 網絡庫 | XiaoFeng網絡庫,封裝了Socket客戶端,服務端(Socket,WebSocket),根據當前庫可輕鬆實現訂閱,發布等功能。 | |
| XiaoFeng.Http | XiaoFeng.Core | 模擬請求庫 | 模擬網絡請求 | |
| XiaoFeng.Data | XiaoFeng.Core | 數據庫操作庫 | 支持SQLSERVER,MYSQL,ORACLE,達夢,SQLITE,ACCESS,OLEDB,ODBC等數十種數據庫 | |
| XiaoFeng.Cache | XiaoFeng.Core | 緩存庫 | 內存緩存,Redis,MemcachedCache,MemoryCache,FileCache緩存 | |
| XiaoFeng.Config | XiaoFeng.Core | 配置文件庫 | 通過創建模型自動生成配置文件,可為xml,json,ini文件格式 | |
| XiaoFeng.Cryptography | XiaoFeng.Core | 加密算法庫 | AES,DES,RSA,MD5,DES3,SHA,HMAC,RC4加密算法 | |
| XiaoFeng.Excel | XiaoFeng.Excel | Excel操作庫 | Excel操作,創建excel,編輯excel,讀取excel內容,邊框,字體,樣式等功能 | |
| XiaoFeng.Ftp | XiaoFeng.Ftp | FTP請求庫 | FTP客戶端 | |
| XiaoFeng.IO | XiaoFeng.Core | 文件操作庫 | 文件讀寫操作 | |
| XiaoFeng.Json | XiaoFeng.Core | Json序列化,反序列化庫 | Json序列化,反序列化庫 | |
| XiaoFeng.Xml | XiaoFeng.Core | Xml序列化,反序列化庫 | Xml序列化,反序列化庫 | |
| XiaoFeng.Log | XiaoFeng.Core | 日誌庫 | 寫日誌文件,數據庫 | |
| XiaoFeng.Memcached | XiaoFeng.Memcached | Memcached緩存庫 | Memcached中間件,支持.NET框架、.NET內核和.NET標準庫,一種非常方便操作的客戶端工具。實現了Set,Add,Replace,PrePend,Append,Cas,Get,Gets,Gat,Gats,Delete,Touch,Stats,Stats Items,Stats Slabs,Stats Sizes,Flush_All,Increment,Decrement,線程池功能。 | |
| XiaoFeng.Redis | XiaoFeng.Redis | Redis緩存庫 | Redis中間件,支持.NET框架、.NET內核和.NET標準庫,一種非常方便操作的客戶端工具。實現了Hash,Key,String,ZSet,Stream,Log,List,訂閱發布,線程池功能; | |
| XiaoFeng.Threading | XiaoFeng.Core | 線程庫 | 線程任務,線程隊列 | |
| XiaoFeng.Mvc | XiaoFeng.Mvc | 低代碼WEB開發框架 | .net core 基礎類,快速開發CMS框架,真正的低代碼平台,自帶角色權限,WebAPI平台,後台管理,可託管到服務運行命令為:應用.exe install 服務名服務說明,命令還有delete 刪除start 啟動stop 停止。 | |
| XiaoFeng.Proxy | XiaoFeng.Proxy | 代理庫 | 開發中 | |
| XiaoFeng.TDengine | XiaoFeng.TDengine | TDengine 客戶端 | 開發中 | |
| XiaoFeng.GB28181 | XiaoFeng.GB28181 | 視頻監控庫,SIP類庫,GB28181協議 | 開發中 | |
| XiaoFeng.Onvif | XiaoFeng.Onvif | 視頻監控庫Onvif協議 | XiaoFeng.Onvif 基於.NET平台使用C#封裝Onvif常用接口、設備、媒體、雲台等功能, 拒絕WCF服務引用動態代理生成wsdl類文件, 使用原生XML擴展標記語言封裝參數,所有的數據流向都可控。 |
//新建一个服务端,同时支持websocket,socket客户端连接
var server = new NetServer < ServerSession > ( 8088 )
{
//是否启用ping
IsPing = true ,
//是否启用新行
IsNewLine = true ,
//传输编码
Encoding = System . Text . Encoding . UTF8 ,
//认证 认证不过则直接断开
SocketAuth = s =>
{
//判断 客户端是否符合认证,不符合则直接返回false即可
return true ;
}
} ;
server . OnStart += ( s , e ) =>
{
//服务端启动事件
Console . WriteLine ( $ "启动!- { DateTime . Now : yyyy-MM-dd HH:mm:ss.fffffff } " ) ;
} ;
server . OnNewConnection += ( s , e ) =>
{
//客户端新连接事件
Console . WriteLine ( $ "新连接- { DateTime . Now : yyyy-MM-dd HH:mm:ss.fffffff } " ) ;
//给当前客户端设置一个频道名 为后边按频道名发送作准备
//一个客户端可以订阅多个频道
//websocket可以从头里面获取标识
//如果非websocket 可以从消息里设置频道消息
if ( s . Headers . IndexOf ( "Channel:a" ) > 0 )
s . AddChannel ( "a" ) ;
else
s . AddChannel ( "b" ) ;
} ;
server . OnDisconnected += ( s , e ) =>
{
//客户端断开连接事件
Console . WriteLine ( $ "断开连接!- { DateTime . Now : yyyy-MM-dd HH:mm:ss.fffffff } " ) ;
} ;
server . OnMessage += ( s , m , e ) =>
{
//接收消息事件
if ( m . IndexOf ( "Channel:a" ) > 0 )
{
s . AddChannel ( "a" ) ;
return ;
}
else if ( m . IndexOf ( "Channel:b" ) > 0 )
{
s . AddChannel ( "b" ) ;
return ;
}
Console . WriteLine ( $ "消息- { m } - { DateTime . Now : yyyy-MM-dd HH:mm:ss.fffffff } " ) ;
//把当前消息发送到频道名为a的所有客户端
server . Send ( "a" , Encoding . UTF8 . GetBytes ( "消息" ) ) ;
//回复当前客户端消息
s . Send ( "消息" ) ;
//发送消息给所有客户端
server . Send ( "消息" ) ;
} ;
server . OnMessageByte += ( session , message , e ) =>
{
//接收消息事件
session . Send ( "回复客户端消息" ) ;
} ;
server . OnError += ( s , e ) =>
{
//服务端出错事件
Console . WriteLine ( $ "出错- { e . Message } - { DateTime . Now : yyyy-MM-dd HH:mm:ss.fffffff } " ) ;
} ;
server . OnClientError += ( session , e ) =>
{
//客户端出错事件
} ;
server . OnError += ( session , e ) =>
{
//服务端出错事件
} ;
server . OnStop += ( socket , e ) =>
{
//服务端停止事件
} ;
server . Start ( ) ;
//添加黑名单
server . AddIpBlack ( "10.10.10.10" ) ;
//移除黑名单
server . RemoveIpBlack ( "10.10.10.10" ) ;
//清空黑名单
server . ClearIpBlack ( ) ;
//断开所有客户端
server . ClearQueue ( ) ;
//在线客户端列表 复制出来的
var clients = server . GetData ( ) ;
//在线客户端列表 原列表
var clients1 = server . ConnectionSocketList ; var client = new XiaoFeng . Net . NetClient < XiaoFeng . Net . ClientSession > ( "127.0.0.1" , 8888 ) ;
client . OnStart += ( socket , e ) =>
{
//启动消息
} ;
client . OnClose += ( socket , e ) =>
{
//关闭消息
} ;
client . OnDisconnected += ( session , e ) => {
//断开连接消息
} ;
client . OnError += ( socket , e ) =>
{
//出错消息
} ;
client . OnMessageByte += ( session , message , e ) =>
{
//接收信息
} ;
//启动客户端
client . Start ( ) ;
client . Send ( "发送消息" ) ;
client . Subscribe ( "订阅频道" ) ;
client . UnSubscribe ( "取消订阅频道" ) ;