C#基于Socket的TCP通信实现聊天室案例

yizhihongxing

下面将为您详细讲解“C#基于Socket的TCP通信实现聊天室案例”的完整攻略。

一、概述

本文将介绍如何使用C#语言基于Socket实现TCP协议的聊天室案例,并提供两条示例说明。

二、准备工作

在开始之前,我们需要保证以下几点:

  1. 本地已安装Visual Studio或其他C#开发工具;
  2. 了解Socket编程基础知识,比如Socket的创建、套接字的监听、接收和发送数据等操作;
  3. 确保本地已经开启TCP协议的端口,作为聊天室的服务端需要开启需要用到的端口。

三、实现思路

这里我们将介绍一个简单的聊天室实现思路:

  1. 创建服务端和客户端;
  2. 服务端监听客户端的连接请求,一旦有客户端连接上来,就将其加入到连接池中;
  3. 客户端连接服务端,建立连接;
  4. 客户端可以向服务端发送消息,服务端接收到消息后将其广播给所有处于连接池中的客户端;
  5. 客户端接收到服务端广播的消息后,将消息显示在自己的聊天窗口中。

四、代码实现

示例一:服务端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Threading;

namespace TCPServerDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建Socket对象
            Socket ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            // 服务端IP地址和端口号
            string IP = "127.0.0.1";
            int Port = 8888;

            // 绑定IP和端口号,并监听连接请求
            ServerSocket.Bind(new System.Net.IPEndPoint(System.Net.IPAddress.Parse(IP), Port));
            ServerSocket.Listen(10);

            Console.WriteLine("服务端已启动,等待客户端请求...");

            // 无限循环监听客户端请求
            while (true)
            {
                Socket clientSocket = ServerSocket.Accept();

                // 新开线程处理客户端请求
                Thread thread = new Thread(ReceiveMessage);
                thread.Start(clientSocket);
            }
        }

        /// <summary>
        /// 接收消息并处理
        /// </summary>
        static void ReceiveMessage(object obj)
        {
            Socket clientSocket = (Socket)obj;

            // 接收消息
            byte[] buffer = new byte[1024];
            int length = clientSocket.Receive(buffer);

            // 将接收到的消息转换为字符串
            string message = Encoding.UTF8.GetString(buffer, 0, length);

            Console.WriteLine("收到客户端消息:" + message);

            // 将接收到的消息发送给所有客户端
            byte[] sendMessage = Encoding.UTF8.GetBytes(message);
            clientSocket.Send(sendMessage);

            // 关闭连接
            clientSocket.Shutdown(SocketShutdown.Both);
            clientSocket.Close();
        }
    }
}

示例二:客户端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;

namespace TCPClientDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入要发送的消息:");
            string message = Console.ReadLine();

            // 创建Socket对象,用于连接服务端
            Socket ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            // 服务端IP地址和端口号
            string IP = "127.0.0.1";
            int Port = 8888;

            // 连接服务端
            ClientSocket.Connect(IP, Port);

            // 向服务端发送消息
            byte[] sendMessage = Encoding.UTF8.GetBytes(message);
            ClientSocket.Send(sendMessage);

            // 接收服务端发回的数据
            byte[] buffer = new byte[1024];
            int length = ClientSocket.Receive(buffer);

            // 将接收到的数据转换为字符串
            string receivedMessage = Encoding.UTF8.GetString(buffer, 0, length);

            Console.WriteLine("服务端返回的消息:" + receivedMessage);

            // 关闭连接
            ClientSocket.Shutdown(SocketShutdown.Both);
            ClientSocket.Close();

            Console.ReadKey();
        }
    }
}

五、实现效果

通过以上两个示例,我们可以实现简单的聊天室效果。启动服务端,等待客户端请求,客户端连接服务端后,可以向服务端发送消息,服务端接收到消息后将其广播给所有客户端,所有客户端都可以收到和发送消息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#基于Socket的TCP通信实现聊天室案例 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • 通过 C#/VB.NET 代码将 Excel 工作表拆分为单独的文件

    首先对于 “通过 C#/VB.NET 代码将 Excel 工作表拆分为单独的文件” 这个问题,我们可以采用以下步骤: 第一步:打开 Excel 文件 使用 C#/VB.NET 代码操作 Excel 需要安装 Microsoft Office 的相关库文件,一般可以通过 NuGet 安装。在打开 Excel 文件之前,需要先声明引用 Microsoft.Off…

    C# 2023年5月31日
    00
  • .Net core 的热插拔机制的深入探索及卸载问题求救指南

    .Net Core的热插拔机制是指在应用程序运行时,可以动态地添加、删除或替换程序集,而无需停止应用程序。本文将深入探索.Net Core的热插拔机制,并提供卸载问题的求救指南。 热插拔机制的实现 .Net Core的热插拔机制是通过应用程序域(AppDomain)实现的。应用程序域是一个隔离的执行环境,可以在其中加载和卸载程序集。在.Net Core中,应…

    C# 2023年5月16日
    00
  • C# 并行和多线程编程——认识和使用Task

    C#并行和多线程编程——认识和使用Task 在C#中,Task类是用来支持并行和多线程编程的。本文将详细介绍如何使用Task类。 Task的定义 Task类是C#中用来提供线程执行的工具类,使用Task,可以异步执行计算任务、并行处理集合等。Task可以并行执行多个任务,加快程序的执行速度,提高程序的响应速度。 Task的创建和使用 通过Task类创建的任务…

    C# 2023年5月15日
    00
  • 不用IDE写C#的Hello World的方法

    下面是不用IDE写C#的HelloWorld的方法的完整攻略。 什么是C#? C# (C Sharp) 是由微软公司开发的一种面向对象、类型安全、高效并且易于学习的编程语言。它是能够在 .NET 平台上开发各种应用程序的一种语言。 需要的工具 .NET Framework(最新版本) 文本编辑器,例如 Notepad++, Sublime Text 等 创建…

    C# 2023年5月14日
    00
  • C#中Hashtable和Dictionary的区别与用法示例

    一、Hashtable和Dictionary的区别Hashtable和Dictionary都是用于实现键值对(Key-Value)的数据结构。它们的主要区别在于: 所属命名空间不同Hashtable属于System.Collections命名空间,而Dictionary属于System.Collections.Generic命名空间。Dictionary相对…

    C# 2023年6月1日
    00
  • 用C#破解Chrome浏览器cookie值

    背景 最近小编接到一个获取网站请求数据的需求,要求抓取网站某个页面请求的数据。我使用Google Chrome浏览器查看了一下请求链接的传入参数,发现需要传入一个Token值才能获取数据。于是我在Chrome中登录后,通过Postman请求成功,并将Token存储到了Cookie中。然而问题又来了,在代码层面如何获取这个Token呢? 解决方案 小编在网上查…

    C# 2023年4月18日
    00
  • asp.net 光棒效应实现代码

    ASP.NET 光棒效应(Nyan Cat Progress Bar)是一种在页面加载或异步请求时,使用CSS3动画实现的进度条。在本文中,我们将深入了解如何通过 ASP.NET 实现这种可爱的进度条效果。 实现步骤 第一步:创建结构 HTML中应该包括进度条的容器和过渡滑块,如下代码所示: <div> <div class="p…

    C# 2023年5月31日
    00
  • .NET Core读取配置文件的方法

    .NET Core读取配置文件的方法 在.NET Core应用程序中,读取配置文件是一项非常重要的任务。配置文件可以包含应用程序的各种设置,如数据库连接字符串、日志级别、缓存设置等。在本攻略中,我们将介绍.NET Core读取配置文件的方法,并提供两个示例说明。 1. 配置文件的格式 在.NET Core应用程序中,配置文件的格式可以是JSON、XML、IN…

    C# 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部