简介:
工作中经常遇到需要实现TCP客户端或服务端的时候,如果每次都自己写会很麻烦且无聊,使用SuperSocket库又太大了。这时候就可以使用SimpleTCP了,当然仅限于C#语言。
它的主要特点如下:
- 源码简单:源码就几个类,每个类也不大,在了解TcpClient用法的基础上不需要注释就可以看懂。
- 功能单一:不像其它库一样功能繁多,它只专注于实现简单的TCP客户端、服务端,使用起来不用担心增加系统的复杂性。
- 使用简单:后面的示例会具体讲解,启动一个客户端或服务端只需要几行代码,想扩展功能也很简单。
说一下它的不足之处:
- 性能不是最优的:底层是基于TcpClient的,性能注定不会太高,但能用TcpClient的地方都可以用它。
使用方法:
通过NuGet安装,如下:
实现Server服务器:
static void Main(string[] args)
{
var server = new SimpleTcpServer();
//设置编码格式,默认是UTF8
server.StringEncoder = System.Text.ASCIIEncoding.ASCII;
server.Delimiter = Encoding.ASCII.GetBytes("\r")[0];
server.Start(IPAddress.Parse("127.0.0.1"),1002);
server.ClientConnected += Server_ClientConnected;
server.ClientDisconnected += Server_ClientDisconnected;
server.DataReceived += Server_DataReceived;
Console.ReadKey();
}
private static void Server_DataReceived(object sender, Message e)
{
Console.WriteLine("接受信息[" +e.TcpClient.Client.RemoteEndPoint.ToString()+"]:"+ e.MessageString);
e.Reply("OK");
}
private static void Server_ClientDisconnected(object sender, System.Net.Sockets.TcpClient e)
{
Console.WriteLine("客户端断开信息["+e.Client.RemoteEndPoint.ToString()+"]");
}
private static void Server_ClientConnected(object sender, System.Net.Sockets.TcpClient e)
{
Console.WriteLine("客户端连接信息[" + e.Client.RemoteEndPoint.ToString() + "]");
}
实现Client:
static void Main(string[] args)
{
var client = new SimpleTcpClient();
//设置编码格式,默认是UTF8
client.StringEncoder = System.Text.ASCIIEncoding.ASCII;
//设置分隔符,默认是0x13
client.Delimiter = Encoding.ASCII.GetBytes("\r")[0];
//收到数据的事件,可以在这里实现自己的协议
client.DataReceived += (sender, msg) =>
{
//字符串消息
Console.WriteLine(msg.MessageString);
};
bool exit = false;
bool connected = false;
Task.Factory.StartNew(() =>
{
while (!exit)
{
try
{
if (connected)
{
//发送心跳
client.Write("-");
Task.Delay(10000).Wait();
}
else
{
//断线重连
client.Connect("127.0.0.1",1002);
connected = true;
Task.Delay(1000).Wait();
}
}
catch (Exception)
{
connected = false;
client.Disconnect();
}
}
}, TaskCreationOptions.LongRunning);
Console.ReadKey();
}