前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# TCP通讯示例

C# TCP通讯示例

作者头像
zls365
发布2021-01-13 16:07:01
2.1K0
发布2021-01-13 16:07:01
举报
文章被收录于专栏:CSharp编程大全

示例目的:使用控制台项目模板分别新建一个服务器和一个客户端,实现两两通讯

1. 新建服务器项目

代码语言:javascript
复制
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace server
{
    class Program
    {
        static TcpClient tcpClient;
        static NetworkStream stream;
        static void Main(string[] args)
        {
            try
            {
                var serverIPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 13000); // 当前服务器使用的ip和端口
                TcpListener tcpListener = new TcpListener(serverIPEndPoint);
                tcpListener.Start();
                Console.WriteLine("服务端已启用......"); // 阻塞线程的执行,直到一个客户端连接
                tcpClient = tcpListener.AcceptTcpClient();
                Console.WriteLine("已连接.");
                stream = tcpClient.GetStream();          // 创建用于发送和接受数据的NetworkStream

                #region 开启线程保持通讯
                var t1 = new Thread(ReceiveMsg);
                t1.Start();
                var t2 = new Thread(SendMsg);
                t2.Start();
                #endregion
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadKey();
            }

        }

        /// <summary>
        /// 发送消息
        /// </summary>
        static void SendMsg()
        {
            string message = string.Empty;
            byte[] messageBytes;
            try
            {
                while (true)
                {
                    message = Console.ReadLine().ToString();        // 获取控制台字符串
                    messageBytes = Encoding.UTF8.GetBytes(message); // 将消息编码成字符串数组
                    stream.Write(messageBytes, 0, messageBytes.Length);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadKey();
            }

        }

        /// <summary>
        /// 接收消息
        /// </summary>
        static void ReceiveMsg()
        {
            byte[] buffer = new byte[1024]; // 预设最大接受1024个字节长度,可修改
            int count = 0;
            try
            {
                while ((count = stream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    Console.WriteLine($"{tcpClient.Client.LocalEndPoint.ToString()}:{Encoding.UTF8.GetString(buffer, 0, count)}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadKey();
            }

        }
    }
}

2. 新建客户端项目

代码语言:javascript
复制
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace client
{
    class Program
    {
        static TcpClient tcpClient;
        static NetworkStream stream;
        static void Main(string[] args)
        {
            try
            {
                var clientIPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 4196); // 当前客户端使用的ip和端口
                tcpClient = new TcpClient(clientIPEndPoint);
                var serverIPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 13000); // 当前服务器使用的ip和端口
                tcpClient.Connect(serverIPEndPoint);    // 连接服务器
                var isConnected = tcpClient.Connected;
                Console.WriteLine("客户端已启用......");
                stream = tcpClient.GetStream();         // 创建用于发送和接受数据的NetworkStream

                #region 开启线程保持通讯
                var t1 = new Thread(ReceiveMsg);
                t1.Start();
                var t2 = new Thread(SendMsg);
                t2.Start();
                #endregion
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadKey();
            }
        }

        /// <summary>
        /// 接收消息
        /// </summary>
        static void ReceiveMsg()
        {
            byte[] buffer = new byte[1024]; // 预设最大接受1024个字节长度,可修改
            int count = 0;
            try
            {
                while ((count = stream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    Console.WriteLine($"{tcpClient.Client.LocalEndPoint.ToString()}:{Encoding.UTF8.GetString(buffer, 0, count)}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadKey();
            }

        }

        /// <summary>
        /// 发送消息
        /// </summary>
        static void SendMsg()
        {
            string message = string.Empty;
            byte[] messageBytes;
            try
            {
                while (true)
                {
                    message = Console.ReadLine().ToString();        // 获取控制台字符串
                    messageBytes = Encoding.UTF8.GetBytes(message); // 将消息编码成字符串数组
                    stream.Write(messageBytes, 0, messageBytes.Length);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadKey();
            }

        }
    }
}

3.先启动服务器,再启动客户端,查看效果

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CSharp编程大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档