C#实现简易多人聊天室

下面是“C#实现简易多人聊天室”的完整攻略:

1. 创建C# Windows窗体应用程序

首先,需要在Visual Studio中创建一个新的Windows窗体应用程序。

2. 添加控件

在窗体上添加控件,例如一个文本框、一个按钮和一个列表框。文本框用于输入聊天内容,按钮用于发送消息,列表框则用于显示所有接收到的消息。

3. 建立套接字连接

在C#中,可以使用Socket类创建TCP连接。需要使用IPAddress和IPEndPoint类来指定服务器地址和端口号。

using System.Net;
using System.Net.Sockets;

Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipAddress = IPAddress.Parse("127.0.0.1"); //服务器ip地址
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 8000); //服务器端口号
clientSocket.Connect(ipEndPoint);

4. 发送聊天消息

当用户点击“发送”按钮时,需要将输入框中的内容发送到服务器。在C#中,可以使用NetworkStream类和StreamWriter类向套接字发送消息。

using System.IO;

NetworkStream networkStream = new NetworkStream(clientSocket);
StreamWriter streamWriter = new StreamWriter(networkStream);

string message = textBox.Text; //获取用户输入的聊天消息
streamWriter.WriteLine(message); //发送消息到服务器
streamWriter.Flush(); //清空缓存区

5. 接收聊天消息

在客户端接收聊天消息需要在单独的线程中监听服务器发送的消息。可以使用TcpClient类和NetworkStream类来实现。另外,为了避免UI线程的阻塞,可以使用Windows Forms中的Invoke方法来更新UI元素。

using System.Threading;

Thread thread = new Thread(() =>
{
    while (true)
    {
        NetworkStream networkStream = new NetworkStream(clientSocket);
        StreamReader streamReader = new StreamReader(networkStream);

        string message = streamReader.ReadLine(); //接收服务器发送的消息

        listBox.Invoke(new Action(() =>
        {
            listBox.Items.Add(message); //更新UI元素
        }));
    }
});

thread.Start(); //启动线程

示例1:C#实现简单的服务器

在此示例中,我们将实现一个简单的服务器来监听客户端的连接并打印收到的消息。

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        TcpListener serverSocket = new TcpListener(IPAddress.Any, 8000);

        serverSocket.Start();
        Console.WriteLine("服务器已启动");

        TcpClient clientSocket = serverSocket.AcceptTcpClient();
        Console.WriteLine("客户端已连接");

        NetworkStream networkStream = clientSocket.GetStream();
        byte[] bytesFrom = new byte[100];
        int bytesRead = networkStream.Read(bytesFrom, 0, bytesFrom.Length);
        string message = Encoding.ASCII.GetString(bytesFrom, 0, bytesRead);
        Console.WriteLine("收到消息:" + message);

        networkStream.Close();
        clientSocket.Close();
        serverSocket.Stop();
        Console.WriteLine("服务器已关闭");
        Console.ReadKey();
    }
}

示例2:C#实现简单的客户端

在此示例中,我们将实现一个简单的客户端来连接服务器并向服务器发送消息。

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        TcpClient clientSocket = new TcpClient();
        clientSocket.Connect(IPAddress.Parse("127.0.0.1"), 8000);

        NetworkStream networkStream = clientSocket.GetStream();
        string message = "Hello, server!";
        byte[] bytesToSend = Encoding.ASCII.GetBytes(message);
        networkStream.Write(bytesToSend, 0, bytesToSend.Length);

        networkStream.Close();
        clientSocket.Close();

        Console.WriteLine("消息已发送");
        Console.ReadKey();
    }
}

以上就是“C#实现简易多人聊天室”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现简易多人聊天室 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 使用Lable控件输出九九乘法表

    使用Label控件输出九九乘法表有以下步骤: Step 1: 创建Label控件 首先,需要在程序中创建一个Label控件来显示九九乘法表的内容。在Python的Tkinter模块中,可以使用Label控件对应的类tk.Label来创建Label控件。以下示例中,我们创建一个名为text_label的Label控件,并将其添加到程序的主窗口中。 import…

    C# 2023年6月7日
    00
  • C#实现读取DataSet数据并显示在ListView控件中的方法

    C#实现读取DataSet数据并显示在ListView控件中的方法 1. 创建DataSet对象并添加DataTable 首先,需要创建一个DataSet对象并添加一个或多个DataTable对象,来存储需要读取的数据。示例代码如下: DataSet dataSet = new DataSet(); DataTable table = new DataTab…

    C# 2023年6月7日
    00
  • C#识别出图片里的数字和字母

    针对“C#识别出图片里的数字和字母”这个问题,我提供以下完整攻略: 准备工作 在进行图片识别之前,需要确保你已经具备以下条件: 安装了C#编程环境,并熟悉编程基础; 安装了Tesseract OCR引擎,该引擎是一款开源OCR引擎,可用于识别图片中的文字。 代码实现 一般来说,实现图片识别的代码可以分为以下几个步骤: 加载图片; 对图片进行预处理; 识别图片…

    C# 2023年6月7日
    00
  • C#(.NET)数据访问连接、查询、插入等操作的封装类

    C#(.NET)数据访问连接、查询、插入等操作的封装类是开发.NET应用程序必不可少的一部分。下面是整个封装类的详细攻略。 1.数据库连接 1.1 数据库连接字符串 在封装类中,首先需要定义数据库的连接字符串。连接字符串包含数据库服务器名、数据库名、用户身份验证等信息。 string connectionString = "Server=mySer…

    C# 2023年5月31日
    00
  • ASP.NET Core按用户等级授权的方法

    以下是关于“ASP.NET Core 按用户等级授权的方法”的完整攻略: 1. ASP.NET Core 授权 ASP.NET Core 授权是一种用于限用户访问应用程序中某些资源的机制。通过授权,我们限制用户访问某些页面、API 或其他资源,以保护应用的安全性和完整性。 2. ASP.NET Core 按等级授权 ASP.NET Core 按用户等级授权是…

    C# 2023年5月12日
    00
  • 分享两种实现Winform程序的多语言支持的多种解决方案

    接下来我将详细讲解Winform程序实现多语言支持的多种解决方案。 1. 利用Resx文件实现多语言支持 Resx文件是.NET中专门用于多语言支持的文件格式,可以用来存储不同语言的文本信息,在程序中通过读取Resx文件来实现不同语言的界面显示。 1.1 创建Resx文件 创建Resx文件有多种方式,这里以Visual Studio为例。 在Visual S…

    C# 2023年6月7日
    00
  • c#基础系列之System.String的深入理解

    C#基础系列之System.String的深入理解 前言 String 是 C# 中的一个非常重要且常用的数据类型,使用频率很高。本文主要讲解 String 的定义、初始化、赋值、整体替换、部分替换、常见方法、比较方式、特殊字符的处理等。 定义和初始化 定义一个 String 变量,可以使用以下语法: string str; 这样定义的变量不会被初始化,其值…

    C# 2023年6月7日
    00
  • C#中动态显示当前系统时间的实例方法

    下面我将为您详细讲解在C#中动态显示当前系统时间的实例方法的完整攻略。 步骤1:创建新的控制台应用程序 在Visual Studio中创建新的控制台应用程序,命名为“DynamicTime”。 步骤2:添加必要的命名空间 为了使用C#中的DateTime类,我们需要在程序中添加System命名空间。 using System; 步骤3:创建主方法 在Main…

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