工作中经常遇到需要实现TCP客户端或服务端的时候,如果每次都自己写会很麻烦且无聊,使用SuperSocket库又太大了。这时候就可以使用SimpleTCP了,当然仅限于C#语言。
SimpleTCP是一个简单且非常有用的 .NET 库,用于处理启动和使用 TCP 套接字(客户端和服务器)的重复性任务,使用起来非常方便、代码也少。它的内部不是直接使用的Socket,而是在TcpClient的基础上进行了再次封装,接口更简单、明了。
目录
简介
使用方法
实现客户端
实现服务端
总结
它的主要特点如下:
源码简单:源码就几个类,每个类也不大,在了解TcpClient用法的基础上不需要注释就可以看懂。
功能单一:不像其它库一样功能繁多,它只专注于实现简单的TCP客户端、服务端,使用起来不用担心增加系统的复杂性。
使用简单:后面的示例会具体讲解,启动一个客户端或服务端只需要几行代码,想扩展功能也很简单。
说一下它的不足之处(在我看来完全可以接受):
已停止更新:最后更新时间是2017年,不过库的功能比较简单、单一,也没那么多更新的内容。
性能不是最优的:底层是基于TcpClient的,性能注定不会太高,但能用TcpClient的地方都可以用它。
在项目中直接引用SimpleTCP.dll即可, dll文件可以通过NuGet安装或从github下载源码编译。
SimpleTCP内部有一个特殊字符分割字符串的协议可以直接使用,也可以在DataReceived事件处理程序中实现自己的协议。
实现一个客户端的代码如下:
DelimiterDataReceived和DataReceived内部使用了两个不同的字节链表,解析起来互不影响。这两个事件的处理程序中尽量不要做耗时的操作,否则会影响后续的数据接收。
SimpleTCP没有心跳、重连功能,也没找到反馈客户端连接状态的属性(不建议使用内部TcpClient的连接状态)。我们可以直接扩展这些功能,代码如下:
把上面的代码按顺序复制到控制台的Main函数中,然后加入下面的代码就可以收发数据了:
注:WriteLineAndGetReply内部使用的是DataReceived,不会自动去除分隔符。
服务端功能比较简单,把收到分割数据加工后返回客户端,代码如下:
上面的代码主要为了展示库的功能,实际使用时可能就几行代码,性能要求不高的项目都可以使用。
项目和库的源码链接如下:
TcpTest 提取码:wvj0
SimpleTCP-master.zip 提取码:kycj(推荐在github上下载)