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

下面将为您详细讲解“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#基础知识回顾–反射(三)

    关于C#基础知识回顾–反射(三)这篇文章的完整攻略如下: 一、反射简介 1.1 反射的概念 反射(Reflection)是指在程序运行的时候访问、检测和修改程序集中的元数据和对象的方式。反射用于访问 .NET 中的元数据,这种元数据描述了程序集(assembly)、模块(module)和类型(type)等。通过元数据,我们可以获取类型信息,了解类的结构和成…

    C# 2023年6月1日
    00
  • Delphi中使用ISuperObject解析Json数据的实现代码

    让我来详细讲解一下“Delphi中使用ISuperObject解析Json数据的实现代码”的完整攻略吧。 什么是ISuperObject 在介绍如何使用ISuperObject解析Json数据之前,我们先来了解一下ISuperObject是什么。ISuperObject是Delphi语言中一款轻量级的Json解析工具,它不仅易于使用,而且解析速度非常快,目前…

    C# 2023年5月31日
    00
  • asp.net 获取系统中参数的实现代码

    要获取系统中的参数,我们可以使用 ASP.NET 提供的 System.Web.Configuration 命名空间中的 ConfigurationSettings、AppSettings 和 ConnectionStrings 类。 1. 使用 ConfigurationSettings 类 ConfigurationSettings 类提供一种获取应用程…

    C# 2023年5月31日
    00
  • Kotlin语法学习-变量定义、函数扩展、Parcelable序列化等简单总结

    Kotlin语法学习-变量定义、函数扩展、Parcelable序列化等简单总结 Kotlin是一种基于JVM的静态类型编程语言,被 Google 选定其为 Android 开发的官方编程语言,因为 Kotlin 代码更短、更简洁,同时具备 强类型检查 和 函数式编程 的特性。 在Kotlin中,我们可以学习到许多有关变量定义、函数扩展、Parcelable序…

    C# 2023年6月7日
    00
  • C# Winform实现导入和导出Excel文件

    让我为你详细解释一下“C# Winform实现导入和导出Excel文件”的完整攻略。 1. 需要用到的Nuget包 在C# Winform应用程序中,需要先安装Excel处理的Nuget包,在Visual Studio的Nuget包管理器中搜索NPOI,找到NPOI这个包,安装即可。 2. 导入Excel文件 下面是一个简单的示例程序,用于从Excel文件中…

    C# 2023年6月1日
    00
  • C# Word 类库的深入理解

    下面我会详细讲解一下“C# Word类库的深入理解”的攻略。 1. Word类库概述 C# Word类库可以让我们通过编程方式操作Word文档。在使用C# Word类库之前需要先引入插件:Microsoft.Office.Interop.Word。该插件提供了对Word文档的操作接口。通过该插件,我们可以创建和修改Word文档,并实现一些自动化操作。 2. …

    C# 2023年5月15日
    00
  • asp.net 截取Http请求的实现代码

    当我们需要对Http请求做一些特殊的处理时,我们可能需要截取Http请求。在ASP.NET中,我们可以通过编写HttpModule和HttpHandler来实现对Http请求的截取。 HttpModule实现截取Http请求 1.创建HttpModule 首先,我们需要创建一个继承自System.Web.IHttpModule接口的类。该接口具有两个方法:I…

    C# 2023年5月31日
    00
  • C#调用RabbitMQ实现消息队列的示例代码

    下面我会给出详细讲解“C#调用RabbitMQ实现消息队列”的完整攻略,其中包含两条示例代码。具体请见下文: 什么是RabbitMQ? RabbitMQ是一个开源的消息中间件,它采用的AMQP协议为应用程序提供可靠的异步消息传输。 RabbitMQ的优势 使用RabbitMQ可以将消息发送给一个或多个接收者,并使用消息队列保存等待处理的消息。这种方式有下面的…

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