.NET 使用 SimpleTCP 实现双工通信

149 阅读3分钟

前言

.NET框架为开发者提供了多种网络编程模型来构建这种实时通讯系统,包括但不限于Socket编程、WCF(Windows Communication Foundation)以及ASP.NET SignalR等。

然而,对于那些寻求快速实现且不想深入底层细节的项目来说,第三方库如SimpleTCP可以提供一种更为便捷的解决方案。

本篇文档将探讨如何利用SimpleTCP库在.NET环境中实现双工通信。我们将从安装配置开始,逐步介绍创建服务器端点与客户端连接的方法,并通过实例演示数据包的发送与接收过程。更好地理解和运用SimpleTCP来满足自己的项目需求。

正文

1、新建 .NET 控制台应用程序并引入包

2、服务端

using SimpleTCP;
using System;
using System.Net;
using System.Text;
​
namespace TcpServe
{
    class Program
    {
        static void Main(string[] args)
        {
            var server = new SimpleTcpServer();
            //设置编码格式,默认是UTF8
            server.StringEncoder = System.Text.ASCIIEncoding.UTF8;
            server.Delimiter = Encoding.ASCII.GetBytes("\r")[0];
            server.Start(IPAddress.Parse("127.0.0.1"), 8080);
            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(":"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
        }
​
        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() + "]");
        }
    }
}

3、客户端

using SimpleTCP;
using System;
using System.Text;
using System.Threading.Tasks;
​
namespace TcpService
{
    class Program
    {
        static void Main(string[] args)
        {
            //初始化
            var client = new SimpleTcpClient();
           
​
            //设置编码格式,默认是UTF8
            client.StringEncoder = System.Text.ASCIIEncoding.UTF8;
            //设置分隔符,默认是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(":"+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                            Task.Delay(2000).Wait();
                        }
                        else
                        {
                            //断线重连
                            client.Connect("127.0.0.1", 8080);
                            connected = true;
                            Task.Delay(1000).Wait();
                        }
                    }
                    catch (Exception)
                    {
                        connected = false;
                        client.Disconnect();
                    }
                }
            }, TaskCreationOptions.LongRunning);
​
            Console.ReadKey(); 
​
        }
    }
}

4、运行结果

开启了多个客户端

总结

通过本篇文章了解了SimpleTCP库作为一种简化TCP/IP网络编程工具的基本用法。我们不仅成功搭建了一个简单的双工通信环境,还探讨了如何使用该库来实现客户端与服务器之间的实时数据交换。

尽管SimpleTCP提供了一种较为直观的方式来处理TCP通讯,但在搭建复杂应用时,仍需关注性能优化、错误处理机制等方面。另外,对于安全性要求较高的场景,还需要考虑加密通信等额外措施。

总之,SimpleTCP作为.NET平台上的一个实用工具,极大地降低了网络编程的门槛,使得即使是初学者也能快速上手,搭建起功能完备的双工通信系统。随着进一步的学习和实践,我们可以更深入地探索其潜力,并将其应用于更多样化的网络应用程序之中。

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!

作者:天才卧龙

出处:cnblogs.com/chenwolong/p/18454662

声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!