SAEA.Socket

高性能 sockets 网络框架
授权协议 Apache-2.0
开发语言 C#
所属分类 Web应用开发、 WebSocket开发包
软件类型 开源软件
地区 国产
投 递 者 支嘉祥
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

SAEA.Socket 是一个 IOCP 高性能 sockets 网络框架,基于 dotnet standard 2.0;Src 中含有其使用场景,例如大文件传输、websocket client and server、高性能消息队列、rpc、redis 驱动、httpserver、MQTT、Mvc、DNS、消息服务器等。

  • [√] IOCP
  • [√] FileTransfer
  • [√] FTP
  • [√] MessageSocket
  • [√] QueueSocket
  • [√] MVC
  • [√] RPC
  • [√] Websocket
  • [√] RedisDrive
  • [√] MQTT
  • [√] DNS

引用组件

引用组件,可以在 nuget 中搜索 saea,或者直接输入命令

Install-Package SAEA.Sockets -Version 6.0.0.2

例子

用于自定义协议的 SAEA.Sockets

JT808协议

测试项目为SAEA.SocketsTest,其中演示了使用三方协议(JT808)来如何扩展 IContext、IUnpacker 解码、编码的方式接入 SAEA.Sockets

FileTransfer

saea.filesocket 用法

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 用法

saea.ftpclient

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

_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 服务器使用

var server = new QServer();
server.Start();

saea.queue producer 用法

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 使用

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);

 

 

 

  • 1.解决思路:在server端以下socket通讯各异步过程中,规避使用相同的saea对象; 接受连接(_listenSocket.AcceptAsync(acceptSaea)), 接收数据(token.UserSocket.ReceiveAsync(recvSaea)), 发送数据(token.UserSocket.SendAsync(sendSaea)) 即上述acceptSaea、recv

  • Issue: socket(AF_INET, SOCK_STREAM, IPPROTO_IP);   总是返回-1 Code: (省略了头文件的引用) int _tmain(int argc, _TCHAR* argv[]) {     int socketId;     socketId = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);     cout<<

  •   GET /socket.io/?EIO=3&transport=websocket 原因: js一直在访问后端socket.io:     var o=t("./url"),i=t("socket.io-parser"),s=t("./manager"),a=t("debug")("socket.io-client");e.exports=n=r;var c=n.managers={};n.p

  • 2021-05-14 周五下午Java课代码记录 1.整体代码 先上代码全文,整节课老师的代码全部包含在下方代码块中 注意: package 和 import 均不包含在代码块中,需要自行添加 tips:复制代码虽然方便,实践更重要  代码全文后有我个人还原的上课过程,仅供思路参考 1.1. MyServerSocket类 * @author yangshiwei * @Descriptio

  • Express Socket 基于 socket.io.js Server端代码: //https://github.com/socketio/socket.io //与express结合 //注意跨域问题 const express = require("express"), app = express(), server = require("http").createServ

  • 一、服务端-server.c #include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #define MAXPENDING 5 #defin

  • Socket地址API 主机字节序与网络字节序 现代pc大多小端,称为主机字节序 不同主机可能字节序不同,为了统一,网络间传输统一采用大端,称网络字节序 #include <netinet/in.h> unsigned long int htonl(unsigned long int hostlong); unsigned short int htons(unsigned short int ho

  • /* 实现一个聊天室功能的软件 服务端做数据处理:每一个用户是一个客服端,每一个用户上线服务端记录。 每个用户的发言都会被服务端通知到其它给用户。 Makefile all: server client server: chat_room.c gcc chat_room.c -o server -g -DDEBUG client: client.c gcc client.c -

  • Socket客户端套接字 // 构造方法 // 使用主机名和端口创建 public Socket(String host, int port) // 成员方法 // 返回Socket的输入流 public InputStream getInputStream() // 返回Socket的输出流 public OutputStream getOutputStream() // 关闭Socket

  • /* * SocketServer.java * 07/30/2007 */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.InetAddress; import j

  • Linux ALSA驱动框架(一)--ALSA架构简介--声卡的创建:https://blog.csdn.net/sinat_37817094/article/details/80490830 alsa-lib应用层接口分析:https://blog.csdn.net/sinat_37817094/article/details/80817559 Linux alsa-lib c语言 播放wav音

  • 点击打开链接

  • var http = require('http'); var read = require('fs').readFileSync; var path = require('path'); var exists = require('fs').existsSync; //引擎 var engine = require('engine.io'); var clientVersion = requir

  • var express = require('express') var app = express() var http = require('http').Server(app) var io = require('socket.io')(http) var path = require('path') // app.use(express.static(path.join(__dirnam

  • accept() 服务器接受客户端的连接请求,并返回一个套接字,客户机通过此套接字与服务器通信。 如果未连接到客户端,线程处于阻塞状态,程序无法执行下去。 一个服务器可以接受多个客户端的连接请求,但其只为第一个已连接套接字服务,只与第一个客户端通信,不会与其他的客户端交互。 如果要为多个客户端服务,让服务器接收的客户端请求(Socket socket=serverSocket.accept())处

  • 函数原型 #include <sys/socket.h> int accept(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict addrlen); 接收一个所监听socket上的连接请求,并创建一个新的socket。 参数简介 sockfd socket描述符,标识一个soc

  • 在Java中,Socket分为TCP,UDP...而TCP,UDP 又分为服务端, 客户端 TCP分为ServerSocket和Socket 而在C#中,Socket只有Socket一个类,TCP和UDP用到的都是这个类,只不过参数不一样 各有各的好处吧,这让我多出一个疑问,为什么Java 要将Socket分开来,服务端一个类, 客户端一个类,而C# 只有一个类? I want to unders

 相关资料
  • 我正在研究一个基于代理的流行病模型。这个想法是单个代理根据他们在网络中观察到的情况(基于距离)做出决定。我在每个代理中都有几个功能,可以动态更新受感染接触者的数量,接触者表现出特定行为等。 下面的代码用于计算代理网络中受感染的联系人。 至少还有3个这样的函数可以保持表示代理网络中其他功能的其他代理的计数。现在,当我 有没有一种计算效率更高的方法来跟踪更大人口的网络统计数据?

  • 问题内容: 我正在选择一个网络库来实现不能花费任何微秒时间的客户端/服务器系统。它将实现自己的协议来发送和接收消息。我正在寻找一个好的NIO框架,该框架将使我能够轻松开发服务器和客户端,而不必过多担心低层选择器的细节。每个人都向我推荐Netty,但在向团队提出框架之前,我想尝试2或3个其他选择。我不太喜欢Netty的一件事是它如何使用自己的ByteBuf实现和引用计数来处理ByteBuffer。谁

  • 准备 测试环境 在以下几种环境下进行测试: Kubernetes集群node节点上通过Cluster IP方式访问 Kubernetes集群内部通过service访问 Kubernetes集群外部通过traefik ingress暴露的地址访问 测试地址 Cluster IP: 10.254.149.31 Service Port:8000 Ingress Host:traefik.sample-

  • 随着技术的发展,企业的正常运行越来越依赖基于线上网络的应用,所以IT部门需要持续监控和改善网络性能,保持用户始终不受网络性能影响,并快速,平稳地交付关键业务解决方案。

  • Uragano 旨在提供一个搭建和使用简单的高性能 RPC 框架。Uragano 是基于 netstandard2.0 开发的。Uragano 默认采用 DotNetty 实现远程通信,使用 MessagePack 进行编解码。

  • 注意:本章属于 Docker 高级配置,如果您是初学者,您可以暂时跳过本章节,直接学习 Docker Compose 一节。 本章将介绍 Docker 的一些高级网络配置和选项。 当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。 同时,Docker 随机分配一个本地未