详解C#如何利用TcpListener和TcpClient实现Tcp通讯

 更新时间:2023年12月25日 10:06:00   作者:rjcql  
TcpListener 和 TcpClient 是在 System.Net.Sockets.Socket 类的基础上做的进一步封装,使用 GetStream 方法返回网络流,下面我们就来详细一下如何使用TcpListener和TcpClient实现Tcp通讯吧

写在前面

TcpListener 和 TcpClient 是在 System.Net.Sockets.Socket 类的基础上做的进一步封装,使用 GetStream 方法返回网络流,由于是以流的方式读取数据,所以在使用过程中更容易有粘包和分包的问题,还不如直接使用Socket类来的方便。

代码实现

服务端代码

    static void TcpListenerTest()
    {
        Console.WriteLine("TcpListener Server");
        var tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 9090);
        tcpListener.Start();
        Console.WriteLine("TcpListener Start");
        var task = Task.Run(() =>
        {
            while (true)
            {
                var tcpClient = tcpListener.AcceptTcpClient();
                var buffer = new byte[tcpClient.ReceiveBufferSize];
                var stream = tcpClient.GetStream();
                stream.Read(buffer, 0, buffer.Length);
                stream.Close();
                tcpClient.Close();
                var receivedMsg = string.Empty;
                receivedMsg += Encoding.UTF8.GetString(buffer).Trim('\0');
                Console.WriteLine("收到消息:" + receivedMsg);
 
                // 服务端心跳间隔
                Thread.Sleep(1000);
            }
        });
 
        Console.ReadLine();
    }

客户端代码

    static void TcpClientTest()
    {
        Console.WriteLine("TcpClient");
 
        var msg = "这是来自客户端的消息111";
        var client = new TcpClient("127.0.0.1", 9090);
        var sendStream = client.GetStream();
        var sendBytes = Encoding.Default.GetBytes(msg);
        sendStream.Write(sendBytes, 0, sendBytes.Length);
        sendStream.Flush();
        sendStream.Close();//关闭网络流  
        client.Close();//关闭客户端  
 
        Console.WriteLine(msg);
 
        Console.ReadLine();
    }

执行结果

到此这篇关于详解C#如何利用TcpListener和TcpClient实现Tcp通讯的文章就介绍到这了,更多相关C# Tcp通讯内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • unity中点击某一个按钮播放某一个动作的操作

    unity中点击某一个按钮播放某一个动作的操作

    这篇文章主要介绍了unity中点击某一个按钮播放某一个动作的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • C# 读取数据库表结构工具设计与实现思路

    C# 读取数据库表结构工具设计与实现思路

    本文介绍了基于C#和ADO.NET的数据库表结构读取工具,并详细阐述了实现步骤、关键技术点及扩展功能,该工具具备低侵入性和高扩展性,适用于开发调试、数据库文档生成等场景,感兴趣的朋友跟随小编一起看看吧
    2026-04-04
  • C# Winform实现圆角无锯齿按钮

    C# Winform实现圆角无锯齿按钮

    这篇文章主要为大家详细介绍了C# Winform实现圆角无锯齿按钮,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • c#实现一个超实用的证件照换底色小工具(附源码)

    c#实现一个超实用的证件照换底色小工具(附源码)

    这篇文章主要给大家介绍了关于利用c#实现一个超实用的证件照换底色小工具的相关资料,通过这个小工具大家可以很方便的进行底色的切换,不用再因为底色的原因头疼了,需要的朋友可以参考借鉴,下面来一起学习学习吧。
    2018-01-01
  • LZW压缩算法 C#源码

    LZW压缩算法 C#源码

    本文分享了一个LZW压缩算法的C#源码,有需要的朋友可以参考一下。
    2016-06-06
  • C# 中AutoMapper的使用方法

    C# 中AutoMapper的使用方法

    这篇文章主要介绍了C# 中AutoMapper的使用方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-12-12
  • C# 使用Dapper与金仓数据库交互的实现步骤

    C# 使用Dapper与金仓数据库交互的实现步骤

    本文主要介绍了C# 使用 Dapper 与金仓数据库交互,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-12-12
  • 浅谈C#9.0新特性之参数非空检查简化

    浅谈C#9.0新特性之参数非空检查简化

    这篇文章主要介绍了浅谈C#9.0新特性之参数非空检查简化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • C#借助Spire.Doc for .NET实现调整Word文档页眉和页脚的高度

    C#借助Spire.Doc for .NET实现调整Word文档页眉和页脚的高度

    在 Microsoft Word 文档中手动调整页眉和页脚高度往往令人头疼,本文将介绍一种使用 Spire.Doc for .NET 在 C# 中精确调整 Word 页眉和页脚高度的解决方案,有需要的小伙伴可以了解下
    2026-03-03
  • C#中dynamic关键字的正确用法(推荐)

    C#中dynamic关键字的正确用法(推荐)

    dynamic的出现让C#具有了弱语言类型的特性。dynamic是FrameWork4.0的新特性。这篇文章主要介绍了C#中dynamic关键字的正确用法(推荐)的相关资料,需要的朋友可以参考下
    2016-11-11

最新评论