# C# Network Library
[![forthebadge](https://forthebadge.com/images/badges/as-seen-on-tv.svg)](https://forthebadge.com)
[![forthebadge](https://forthebadge.com/images/badges/contains-cat-gifs.svg)](https://forthebadge.com)
Tutorials https://www.indie-dev.at/overview-en/ <br />
Downloads http://www.indie-dev.at/?page_id=480 <br />
Licence http://www.indie-dev.at/?page_id=525 <br />
Documentation http://www.indie-dev.at/?page_id=476 <br />
NuGet https://www.nuget.org/packages/Network/ <br />
Chat: https://discordapp.com/invite/tgAzGby <br />
# Continuous Integration
| Build | Architecture | Framework Target | Badge |
| ------------------- | ------------ | ---------------- | ----- |
| Debug | x86 | standard2.0 | [![Build status](https://thomaschristof.visualstudio.com/Network/_apis/build/status/DEBUG%20%20.NET%20Standard%202.0)](https://thomaschristof.visualstudio.com/Network/_build/latest?definitionId=12) |
| Release | x86 | standard2.0 | [![Build status](https://thomaschristof.visualstudio.com/Network/_apis/build/status/RELEASE%20.NET%20Standard%202.0)](https://thomaschristof.visualstudio.com/Network/_build/latest?definitionId=9) |
# Badges
| Service | Description | Badge |
| ------- | ----------- | ----- |
| CodeFactor | Code Quality | ![CodeFactor](https://www.codefactor.io/repository/github/toemsel/network/badge) |
| NuGet | Download Count | ![NuGet](https://img.shields.io/nuget/dt/Network.svg) |
| NuGet | Current Version | ![NuGet](https://img.shields.io/nuget/v/Network.svg) |
| Discord | Chat-Room | [![Discord](https://img.shields.io/discord/502989126916898837.svg)](https://discord.gg/tgAzGby) |
# Support
[Buy me a coffee ☕](https://www.buymeacoffee.com/yoghurt)
# Supported Frameworks
- .NET Standard >= 2.0
- .NET Core >= 2.0
- .NET Framework >= 5.0
- .NET Framework >= 4.6.1
- Mono >= 5.4
- Xamarin.iOS >= 10.14
- Xamarin.MAC >= 3.8
- Xamarin.Android >= 8.0
- UWP >= 10.0.16299
- Unity >= 2018.1
# Features in a nutshell
- TCP communication
- UDP communication
- Factories to ensure the most easy setup
- Server and Client Wrappers (Auto-Reconnect, Auto-Join)
- Object oriented. Don't worry about bits and bytes. **Send and receive objects**
- Optional RSA encryption for TCP and UDP
- Use lambdas, delegates or even async operations to send and receive objects
- Useful helpers to quickly send small information, without creating an object
- Logging for debugging or traffic inspection
- No magic numbers, identifiers or configurations required
- Very fast and relieable (6-10ms RTT)
- Highly customizable
- OpenSource and Free to use
# Example Client
```c#
public void Demo()
{
ConnectionResult connectionResult = ConnectionResult.TCPConnectionNotAlive;
//1. Establish a connection to the server.
TcpConnection tcpConnection = ConnectionFactory.CreateTcpConnection("127.0.0.1", 1234, out connectionResult);
//2. Register what happens if we get a connection
if(connectionResult == ConnectionResult.Connected)
{
Console.WriteLine($"{tcpConnection.ToString()} Connection established");
//3. Send a raw data packet request.
tcpConnection.SendRawData(RawDataConverter.FromUTF8String("HelloWorld", "Hello, this is the RawDataExample!"));
tcpConnection.SendRawData(RawDataConverter.FromBoolean("BoolValue", true));
tcpConnection.SendRawData(RawDataConverter.FromBoolean("BoolValue", false));
tcpConnection.SendRawData(RawDataConverter.FromDouble("DoubleValue", 32.99311325d));
//4. Send a raw data packet request without any helper class
tcpConnection.SendRawData("HelloWorld", Encoding.UTF8.GetBytes("Hello, this is the RawDataExample!"));
tcpConnection.SendRawData("BoolValue", BitConverter.GetBytes(true));
tcpConnection.SendRawData("BoolValue", BitConverter.GetBytes(false));
tcpConnection.SendRawData("DoubleValue", BitConverter.GetBytes(32.99311325d));
}
}
```
# Example Server
```c#
public void Demo()
{
//1. Start listen on a port
serverConnectionContainer = ConnectionFactory.CreateServerConnectionContainer(1234, false);
//2. Apply optional settings.
#region Optional settings
serverConnectionContainer.ConnectionLost += (a, b, c) => Console.WriteLine($"{serverConnectionContainer.Count} {b.ToString()} Connection lost {a.IPRemoteEndPoint.Port}. Reason {c.ToString()}");
serverConnectionContainer.ConnectionEstablished += connectionEstablished;
serverConnectionContainer.AllowUDPConnections = true;
serverConnectionContainer.UDPConnectionLimit = 2;
#endregion Optional settings
//Call start here, because we had to enable the bluetooth property at first.
serverConnectionContainer.Start();
}
/// <summary>
/// We got a connection.
/// </summary>
/// <param name="connection">The connection we got. (TCP or UDP)</param>
private void connectionEstablished(Connection connection, ConnectionType type)
{
Console.WriteLine($"{serverConnectionContainer.Count} {connection.GetType()} connected on port {connection.IPRemoteEndPoint.Port}");
//3. Register packet listeners.
connection.RegisterRawDataHandler("HelloWorld", (rawData, con) => Console.WriteLine($"RawDataPacket received. Data: {rawData.ToUTF8String()}"));
connection.RegisterRawDataHandler("BoolValue", (rawData, con) => Console.WriteLine($"RawDataPacket received. Data: {rawData.ToBoolean()}"));
connection.RegisterRawDataHandler("DoubleValue", (rawData, con) => Console.WriteLine($"RawDataPacket received. Data: {rawData.ToDouble()}"));
}
```
<img src="http://www.indie-dev.at/wp-content/uploads/2016/11/Demo.gif" />
# Async Example
```c#
public async void Demo()
{
//1. Establish a connection to the server.
ClientConnectionContainer container = ConnectionFactory.CreateClientConnectionContainer("127.0.0.1", 1234);
//2. Register what happens if we get a connection
container.ConnectionEstablished += async (connection, type) =>
{
Console.WriteLine($"{type.ToString()} Connection established");
//3. Send a request packet async and directly receive an answer.
CalculationResponse response = await connection.SendAsync<CalculationResponse>(new CalculationRequest(10, 10));
Console.WriteLine($"Answer received {response.Result}");
};
}
```
# Delegate Example
```c#
private ClientConnectionContainer container;
public void Demo()
{
//1. Establish a connection to the server.
container = ConnectionFactory.CreateClientConnectionContainer("127.0.0.1", 1234);
//2. Register what happens if we get a connection
container.ConnectionEstablished += connectionEstablished;
}
private void connectionEstablished(Connection connection, ConnectionType type)
{
Console.WriteLine($"{type.ToString()} Connection established");
//3. Register what happens if we receive a packet of type "CalculationResponse"
container.RegisterPacketHandler<CalculationResponse>(calculationResponseReceived, this);
//4. Send a calculation request.
connection.Send(new CalculationRequest(10, 10), this);
}
private void calculationResponseReceived(CalculationResponse response, Connection connection)
{
//5. CalculationResponse received.
Console.WriteLine($"Answer r
没有合适的资源?快使用搜索试试~ 我知道了~
C# Network Library.zip
共133个文件
cs:97个
csproj:5个
json:5个
需积分: 5 0 下载量 179 浏览量
2024-01-05
14:52:50
上传
评论
收藏 577KB ZIP 举报
温馨提示
C# Network Library
资源推荐
资源详情
资源评论
收起资源包目录
C# Network Library.zip (133个子文件)
ClassDiagra3.cd 12KB
ClassDiagram3.cd 11KB
ClassDiagram2.cd 8KB
ClassDiagram1.cd 6KB
Connection.cs 46KB
ConnectionFactory.cs 32KB
ClientConnectionContainer.cs 26KB
PacketConverter.cs 23KB
RawDataConverter.cs 21KB
ServerConnectionContainer.cs 15KB
PacketHandlerMap.cs 12KB
RSAConnection.cs 12KB
NetworkLog.cs 11KB
UdpConnection.cs 9KB
TcpConnection.cs 7KB
ConnectionAddons.cs 6KB
PacketConverterHelper.cs 6KB
RSAPair.cs 5KB
ChickenReceiver.cs 5KB
RawDataExtension.cs 5KB
ConnectionContainer.cs 4KB
SendDataTypesTest.cs 4KB
SecureTcpConnection.cs 4KB
UnSecureServerExample.cs 4KB
BiDictionary.cs 4KB
SecureServerExample.cs 4KB
SecureUdpConnection.cs 3KB
IPacketHandler.cs 3KB
RSACryptoServiceProviderExtensions.cs 3KB
PacketTypeAttribute.cs 3KB
Packet.cs 3KB
WaitHandleExtensions.cs 3KB
ObjectExample.cs 3KB
ConnectionTests.cs 2KB
IPacketConverter.cs 2KB
SecureConnectionTests.cs 2KB
RSAParametersExtensions.cs 2KB
UidGenerator.cs 2KB
Program.cs 2KB
SecureServerConnectionContainer.cs 2KB
CloseReason.cs 2KB
RawDataExample.cs 2KB
StressTestExample.cs 2KB
SecureClientConnectionContainer.cs 2KB
IRSAConnection.cs 2KB
GlobalSuppressions.cs 2KB
DelegateExample.cs 2KB
ConnectionExtensions.cs 2KB
NullableSimpleDataTypesRequest.cs 2KB
NullableSimpleDataTypesRequest.cs 2KB
RSAKeyInformationRequest.cs 2KB
RSAExample.cs 1KB
ServerFixture.cs 1KB
AsyncExample.cs 1KB
IPv6Example.cs 1KB
Performance.cs 1KB
PacketRequestAttribute.cs 1KB
RSAKeyInformationResponse.cs 1KB
LambdaExample.cs 1KB
ConcurrentBagExtensions.cs 1KB
AddPacketTypeResponse.cs 1KB
EnumeratorExtensions.cs 1KB
SingleConnectionExample.cs 1KB
RSAKeyGeneration.cs 1KB
RawData.cs 1KB
ConnectionNotAliveException.cs 1018B
EstablishUdpResponse.cs 1008B
AddPacketTypeRequest.cs 968B
Program.cs 917B
SimpleDataTypesRequest.cs 907B
CloseRequest.cs 885B
ObjectState.cs 875B
EstablishUdpRequest.cs 842B
ResponsePacket.cs 731B
PacketState.cs 720B
LogLevel.cs 691B
UDPPingResponse.cs 645B
ConnectionType.cs 637B
AddStudentToDatabaseResponse.cs 565B
ObjectDataRequest.cs 561B
Student.cs 506B
AddStudentToDatabaseRequest.cs 455B
IRSACapability.cs 444B
AssemblyInfo.cs 423B
PacketIgnorePropertyAttribute.cs 417B
CalculationResponse.cs 397B
Date.cs 376B
UnSecureServerFixture.cs 350B
NullableSimpleDataTypesResponse.cs 332B
NullableSimpleDataTypesResponse.cs 330B
SecureServerFixture.cs 321B
CalculationRequest.cs 316B
SimpleDataTypesResponse.cs 298B
ObjectDataResponse.cs 278B
EstablishUdpResponseACK.cs 254B
UDPPingRequest.cs 233B
PingRequest.cs 231B
PingResponse.cs 227B
GeoCoordinate.cs 202B
DatabaseResult.cs 162B
共 133 条
- 1
- 2
资源评论
Lei宝啊
- 粉丝: 2067
- 资源: 1330
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功