# SAEA
**Repository Path**: yswenli/SAEA
## Basic Information
- **Project Name**: SAEA
- **Description**: SAEA.Socket是一个IOCP高性能sockets网络框架,基于dotnet standard 2.0;Src中含有其使用场景,例如大文件传输、websocket client and server、高性能消息队列、rpc、redis驱动、httpserver、MQTT、Mvc、DNS、消息服务器等
- **Primary Language**: C#
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/yswenli/SAEA
- **GVP Project**: No
## Statistics
- **Stars**: 119
- **Forks**: 43
- **Created**: 2018-08-04
- **Last Updated**: 2025-10-13
## Categories & Tags
**Categories**: web-dev-toolkits
**Tags**: None
## README
#  SAEA.Socket
[](https://www.nuget.org/packages?q=saea)
[](https://www.apache.org/licenses/LICENSE-2.0.html)
SAEA.Socket Is an IOCP high-performance sockets network framework, based on dotnet standard 2.0; SRC contains its use scenarios, such as large file transfer, websocket client and server, high-performance message queue, RPC, redis driver, httpserver, mqtt, MVC, DNS, message server, etc
SAEA.Socket是一个IOCP高性能sockets网络框架,基于dotnet standard 2.0;Src中含有其使用场景,例如大文件传输、websocket client and server、高性能消息队列、rpc、redis驱动、httpserver、MQTT、Mvc、DNS、消息服务器等
QQ群:788260487
- [√] IOCP
- [√] FileTransfer
- [√] FTP
- [√] MessageSocket
- [√] QueueSocket
- [√] MVC
- [√] RPC
- [√] Websocket
- [√] RedisDrive
- [√] MQTT
- [√] DNS
## Reference component
引用组件,可以在nuget中搜索saea,或者直接输入命令
```
Install-Package SAEA.Sockets -Version 6.0.0.2
```
nuget url: https://www.nuget.org/packages?q=saea
------
# Example
## SAEA.Sockets for custom protocol
### JT808 protocol
The test project is SAEA. Sockets Test, which demonstrates how to extend IContext, IUnpacker decoding and encoding to access SAEA. Sockets by using tripartite protocol (JT808).
测试项目为SAEA.SocketsTest,其中演示了使用三方协议(JT808)来如何扩展IContext、IUnpacker解码、编码的方式接入SAEA.Sockets
## FileTransfer
### saea.filesocket usage
```csharp
var fileTransfer = new FileTransfer(filePath);
fileTransfer.OnReceiveEnd += _fileTransfer_OnReceiveEnd;
fileTransfer.OnDisplay += _fileTransfer_OnDisplay;
fileTransfer.Start();
//send file
fileTransfer.SendFile(string fileName, string ip)
```
## FTP
### saea.ftp usage
#### saea.ftpclient
```csharp
var client = new FTPClient(ip, port, username, pwd);
client.Ondisconnected += _client_Ondisconnected;
client.Connect();
var path = client.CurrentDir();
client.Upload(filePath, (o, c) =>
{
size = c;
_loadingUserControl.Message = $"正在上传文件:{fileName},{(o * 100 / c)}%";
});
client.Download(fileName, Path.Combine(filePath, fileName), (o, c) =>
{
_loadingUserControl.Message = $"正在下载文件:{fileName},{(o * 100 / c)}%";
});
```
#### saea.ftpserver
```csharp
_serverConfig.IP = ip;
_serverConfig.Port = port;
FTPServerConfigManager.Save();
var ftpServer = new FTPServer(_serverConfig.IP, _serverConfig.Port, _serverConfig.BufferSize);
ftpServer.OnLog += _ftpServer_OnLog;
ftpServer.Start();
```
## QueueTest
### saea.queue server usage
```csharp
var server = new QServer();
server.Start();
```
### saea.queue producer usage
```csharp
var ipPort = "127.0.0.1:39654";
QClient producer = new QClient("productor_" + Guid.NewGuid().ToString("N"), ipPort);
producer.OnError += Producer_OnError;
producer.OnDisconnected += Client_OnDisconnected;
producer.Connect();
producer.Publish(topic, msg);
```
### saea.queue consumer usage
```csharp
var ipPort = "127.0.0.1:39654";
QClient consumer = new QClient("subscriber_" + Guid.NewGuid().ToString("N"), ipPort);
consumer.OnMessage += Subscriber_OnMessage;
consumer.OnDisconnected += Client_OnDisconnected;
consumer.Connect();
consumer.Subscribe(topic);
```
## WebSocket
### wsserver usage
```csharp
WSServer server = new WSServer();
server.OnMessage += Server_OnMessage;
server.Start();
private static void Server_OnMessage(string id, WSProtocal data)
{
Console.WriteLine("WSServer 收到{0}的消息:{1}", ConsoleColor.Green, id, Encoding.UTF8.GetString(data.Content));
server.Reply(id, data);
}
```
### wsclient usage
```csharp
WSClient client = new WSClient();
client.OnPong += Client_OnPong;
client.OnMessage += Client_OnMessage;
client.OnError += Client_OnError;
client.OnDisconnected += Client_OnDisconnected;
client.Connect();
client.Send("hello world!");
client.Ping();
client.Close();
```
## RedisTest
https://github.com/yswenli/WebRedisManager
### saea.redis usage
```csharp
var cnnStr = "server=127.0.0.1:6379;passwords=yswenli";
RedisClient redisClient = new RedisClient(cnnStr);
redisClient.Connect();
redisClient.GetDataBase(1).Set("key", "val");
var val = redisClient.GetDataBase().Get("key");
```
## SAEA.MVC
https://github.com/yswenli/SAEA.Rested
### saea.mvc init usage
```csharp
var mvcConfig = SAEAMvcApplicationConfigBuilder.Read();
SAEAMvcApplication mvcApplication = new SAEAMvcApplication(mvcConfig);
//设置默认控制器
mvcApplication.SetDefault("home", "index");
mvcApplication.SetDefault("index.html");
//限制
mvcApplication.SetForbiddenAccessList("/content/");
mvcApplication.SetForbiddenAccessList(".jpg");
mvcApplication.Start();
```
### saea.mvc controller usage
```csharp
[LogAtrribute]
public class HomeController : Controller
{
[Log2Atrribute]
[HttpGet]
[HttpPost]
public ActionResult Index()
{
return Content("Hello,I'm SAEA.MVC!你好!");
}
public ActionResult Show()
{
var response = HttpContext.Response;
response.ContentType = "text/html; charset=utf-8";
response.Write("








