详解C#如何利用TcpListener和TcpClient实现Tcp通讯
作者: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通讯内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!