https://github.com/akon47/simpletcp
📡 A simple-to-use TCP server and client library.
https://github.com/akon47/simpletcp
client csharp-library http-server mono nuget-package tcp tcp-socket
Last synced: 9 months ago
JSON representation
📡 A simple-to-use TCP server and client library.
- Host: GitHub
- URL: https://github.com/akon47/simpletcp
- Owner: akon47
- License: mit
- Created: 2021-08-24T08:06:19.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2021-09-02T04:10:11.000Z (almost 5 years ago)
- Last Synced: 2025-09-23T12:00:57.057Z (9 months ago)
- Topics: client, csharp-library, http-server, mono, nuget-package, tcp, tcp-socket
- Language: C#
- Homepage: https://www.nuget.org/packages/SimpleTcpLib/
- Size: 191 KB
- Stars: 5
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README

# SimpleTcp
A simple-to-use TCP server and client library.
## 🎨 Features
- Asynchronous servers and clients that are very easy to use.
- PacketTcpServer that ensures reception without truncating the size of the data sent.
- HTTP server that is very simple to use.
## 📃 Usage
### Start Tcp Server
```csharp
RawTcpServer tcpServer = new RawTcpServer();
tcpServer.Start(5000);
```
### Can use Event Handlers
```csharp
RawTcpServer tcpServer = new RawTcpServer();
tcpServer.ClientConnected += ClientConnected;
tcpServer.ClientDisconnected += ClientDisconnected;
tcpServer.DataReceived += DataReceived;
```
### Get connected clinets
```csharp
tcpServer.Clients
```
### Send data to client
```csharp
tcpServer.Clients[0].Write(buffer, 0, buffer.Length);
```
### Send data to connected all clients
```csharp
tcpServer.WriteToAllClients(buffer, 0, buffer.Length);
```
---
### Connect to Tcp Server
```csharp
RawTcpClient tcpClient = new RawTcpClient();
tcpClient.Connect("127.0.0.1", 5000);
```
### Can use Event Handlers
```csharp
RawTcpClient tcpClient = new RawTcpClient();
tcpClient.Connected += Connected;
tcpClient.Disconnected += Disconnected;
tcpClient.DataReceived += DataReceived;
```
### Send data to server
```csharp
tcpClient.Write(buffer, 0, buffer.Length);
```
---
### Start Simple Http Server
See the example project for details.
```csharp
HttpServer httpServer = new HttpServer();
httpServer.HttpRequest += (sender, e) =>
{
return new HttpResponse(HttpStatusCode.OK);
};
httpServer.Start(); // default start port is 80
```
## 🐾 Examples
Echo Server / Client
### Echo Server
```csharp
static void Main(string[] args)
{
using (RawTcpServer tcpServer = new RawTcpServer())
{
tcpServer.ClientConnected += (sender, e) =>
Console.WriteLine($"[{e}]: Connected"); // new client connected
tcpServer.ClientDisconnected += (sender, e) =>
Console.WriteLine($"[{e}]: Disconnected"); // client disconnected
tcpServer.DataReceived += (sender, e) =>
{
byte[] readBytes = e.Client.ReadExisting(); // read all data
string dataString = readBytes.Aggregate( // data to hex string
new StringBuilder(32),
(stringBuilder, data) => stringBuilder.Append($" 0x{data.ToString("X2")}")
).ToString().Trim();
Console.WriteLine($"[{e.Client}]: {dataString}");
e.Client.Write(readBytes, 0, readBytes.Length); // return same data
};
try
{
tcpServer.Start(5000);
Console.WriteLine("Listening for connections...");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Console.ReadLine();
}
}
```
### Echo Client
```csharp
static void Main(string[] args)
{
using (RawTcpClient tcpClient = new RawTcpClient())
{
tcpClient.Connected += (sender, e) =>
Console.WriteLine($"Connect to [{e.RemoteEndPoint}]");
tcpClient.Disconnected += (sender, e) =>
Console.WriteLine($"{Environment.NewLine}Disconnected from [{e.RemoteEndPoint}]");
tcpClient.DataReceived += (sender, e) =>
{
if (sender is RawTcpClient rawTcpClient)
{
byte[] readBytes = rawTcpClient.ReadExisting(); // read all data
Console.WriteLine($"DataReceived: {Encoding.ASCII.GetString(readBytes)}");
}
};
try
{
tcpClient.Connect("127.0.0.1", 5000);
while (true)
{
string line = Console.ReadLine();
byte[] buffer = Encoding.ASCII.GetBytes(line);
tcpClient.Write(buffer, 0, buffer.Length);
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
Console.ReadLine();
}
}
}
```
Packet Echo Server / Client
### Packet Echo Server
The size of the received data is received without being cut off.
```csharp
static void Main(string[] args)
{
using (PacketTcpServer tcpServer = new PacketTcpServer())
{
tcpServer.ClientConnected += (sender, e) =>
Console.WriteLine($"[{e}]: Connected"); // new client connected
tcpServer.ClientDisconnected += (sender, e) =>
Console.WriteLine($"[{e}]: Disconnected"); // client disconnected
tcpServer.PacketReceived += (sender, e) =>
{
if (sender is PacketTcpServer packetTcpServer)
{
Console.WriteLine($"[{e.Packet.IPEndPoint}]: PacketReceived (PacketLength: {e.Packet.PacketData.Length})");
packetTcpServer.WritePacket(e.Packet.TcpClient, e.Packet.PacketData); // return same packet
}
};
try
{
tcpServer.Start(5000);
Console.WriteLine("Listening for connections...");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Console.ReadLine();
}
}
```
### Packet Echo Client
```csharp
static void Main(string[] args)
{
using (PacketTcpClient tcpClient = new PacketTcpClient())
{
tcpClient.Connected += (sender, e) =>
Console.WriteLine($"Connect to [{e.RemoteEndPoint}]");
tcpClient.Disconnected += (sender, e) =>
Console.WriteLine($"{Environment.NewLine}Disconnected from [{e.RemoteEndPoint}]");
tcpClient.PacketReceived += (sender, e) =>
{
Console.WriteLine($"PacketReceived: (PacketLength: {e.PacketData.Length})");
};
try
{
tcpClient.Connect("127.0.0.1", 5000);
tcpClient.WritePacket(new byte[1024]); // send 1024 bytes
tcpClient.WritePacket(new byte[1024 * 1024]); // send 1024 * 1024 bytes
tcpClient.WritePacket(new byte[1024 * 1024 * 10]); // send 1024 * 1024 * 10 bytes
Console.ReadLine();
tcpClient.Disconnect();
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Console.ReadLine();
}
}
```

Http Server
### Simple Http Server
```csharp
static void Main(string[] args)
{
using (var httpServer = new SimpleTcp.Server.Http.HttpServer())
{
httpServer.HttpRequest += (sender, e) =>
{
Console.WriteLine($"[{e.Request.IPEndPoint}] -> [{e.Request.Url}]");
switch(e.Request.Url)
{
case "/":
return new HttpResponse(HttpStatusCode.OK)
{
Content = Encoding.UTF8.GetBytes(
"" +
"" +
"" +
"" +
"SimpleTcp HttpServer Example" +
"" +
"" +
"Hello, World !!
Github" +
"" +
"")
};
default:
return new HttpResponse(HttpStatusCode.NotFound);
}
};
httpServer.Start();
Console.ReadLine();
}
}
```

## 🐞 Bug Report
If you find a bug, please report to us posting [issues](https://github.com/akon47/SimpleTcp/issues) on GitHub.