一个简单的 TCP/UDP 模拟服务器,用于测试基于 .Net core 的项目的测试项目。
当我在 Cimon.Net 项目上工作时,我意识到我不能用现有的库来模拟套接字,所以我改变了我的项目来创建假套接字。但问题仍然存在,所以我开始编写这个项目,最后我在Cimon.Net中使用了这个项目。
您可以使用 NuGet Package Manager Console 安装Rony.Net
:
Install-Package Rony.Net -Version 0.1.2
或者通过 .NET Core 命令行界面:
dotnet add package Rony.Net --version 0.1.2
使用 Rony.Net 您可以创建 3 种类型的服务器:
您可以如下创建并运行模拟服务器。端口、IP 和其他设置可通过构造函数进行配置:
using var tcpServer = new MockServer ( new TcpServer ( 3000 ) ) ;
tcpSever . Start ( ) ;
using var tcpSslServer = new MockServer ( new TcpServerSsl ( 4000 , certificateName , SslProtocols . None ) ) ;
tcpSslServer . Start ( ) ;
您必须使用有效且已安装的certificate
,并且您对其私钥具有读取权限,并且您还可以根据您的要求设置SslProtocol
。
using var udpServer = new MockServer ( new UdpServer ( 5000 ) ) ;
请注意,由于其性质,UDP 服务器不需要启动。
然后您可以使用普通客户端连接并向它们发送请求,如下所示:
using var client = new TcpClient ( ) ;
await client . ConnectAsync ( IPAddress . Parse ( "127.0.0.1" ) , 3000 ) ;
var client = new UdpClient ( ) ;
client . Connect ( IPAddress . Parse ( "127.0.0.1" ) , 5000 ) ;
您可以使用mockServer.Mock
来管理发送/接收数据,然后服务器将根据发送的数据返回配置的数据:
mockServer . Mock . Send ( "Test String" ) . Receive ( "Test Response" ) ;
mockServer . Mock . Send ( new byte [ ] { 1 , 2 , 3 } ) . Receive ( new byte [ ] { 3 , 2 , 1 } ) ;
mockServer . Mock . Send ( "abcd" ) . Receive ( x => x . ToUpper ( ) ) ;
使用mockServer.Mock
的一个重要选项是添加Any
请求,然后它将基于此配置回复任何未配置的请求(版本0.1.1及更高版本),您可以通过在Send()
中使用空字符串来配置此选项的服务器Send()
方法,如下所示:
mockServer . Mock . Send ( "" ) . Receive ( "Test Response" ) ;
您可以在mockServer.Run()
之前或之后使用mockServer.Mock
。欲了解更多详细信息,请查看测试项目。
您至少需要 Visual Studio 2019(您可以免费下载社区版)。
所有测试都使用 Xunit,为了使用 SSL/TLS 运行 TCP 服务器,您应该将_certificateName
字段更改为您计算机上的证书名称。请注意,您必须具有证书私钥的读取权限。