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日

相关文章

  • C#通过属性名字符串获取、设置对象属性值操作示例

    下面来详细讲解一下“C#通过属性名字符串获取、设置对象属性值操作示例”的完整攻略。 1. 获取属性值 我们可以使用反射来获取对象的属性值。示例代码如下: var obj = new MyClass(); var propName = "Prop1"; // 要获取的属性名 var propValue = obj.GetType().Get…

    C# 2023年6月1日
    00
  • C#读取Excel到DataTable的方法示例

    下面我将为您详细讲解“C#读取Excel到DataTable的方法示例”的完整攻略。 什么是DataTable DataTable是.NET Framework中的一个类,用于在内存中表示数据库中的一个表格形式的数据结构。DataTable可以包含多个DataColumn,每个DataColumn代表一个表格列。 C#读取Excel到DataTable的方法…

    C# 2023年5月15日
    00
  • .Net Core SDK命令介绍及使用

    .Net Core SDK命令介绍及使用 在使用.Net Core开发应用程序时,我们需要使用.Net Core SDK命令来完成各种任务,例如创建项目、编译代码、运行应用程序等。本攻略将详细介绍.Net Core SDK命令的使用方法,并提供两个示例说明。 常用命令 以下是一些常用的.Net Core SDK命令: dotnet new:创建新项目或文件。…

    C# 2023年5月16日
    00
  • C#线程池ThreadPool用法简介

    C#线程池ThreadPool用法简介 简介 C# 线程池(ThreadPool)是 .NET Framework 的一个重要组件,它可以管理和调度运行于多个工作线程上的任务,这样就可以避免频繁地创建和销毁线程。 采用线程池的方式可以优化应用程序的性能,同时降低系统的负担。 使用 使用线程池需要使用 System.Threading 命名空间中的 Threa…

    C# 2023年6月6日
    00
  • C#中用管理员身份运行程序代码实例

    下面是“C#中用管理员身份运行程序代码实例”的完整攻略。 1. 简介 在C#中,我们可以通过代码来申请管理员权限来运行程序。这样可以确保我们的程序拥有足够的权限来执行需要的操作。 2. 代码实现 示例一:UAC(用户账户控制)提示框 在Windows Vista及以后的版本中,操作系统引入了用户账户控制(UAC),用于提高系统安全性。UAC会提示用户是否允许…

    C# 2023年5月31日
    00
  • .NET垃圾回收器(GC)原理浅析

    . 标题 为了让读者更好地理解.NET垃圾回收器(GC)的原理,本文将从以下几个方面进行分析: 1. 垃圾回收的概念 首先,我们需要了解垃圾回收的概念。在.NET中,所有的对象都是分配在托管堆(Managed Heap)中的,而堆的管理和维护是由GC负责的。GC会定期检查堆中的对象,识别出哪些对象是不再被使用的,然后将其回收,释放所占用的空间。 2. 垃圾回…

    C# 2023年5月15日
    00
  • C#中FormsAuthentication用法实例

    下面是关于“C#中FormsAuthentication用法实例”的完整攻略。 一、什么是FormsAuthentication FormsAuthentication 是 ASP.NET 提供的一种 Forms 身份验证机制,它使用基于 Cookie 的认证方式来验证用户身份。 在使用 FormsAuthentication 时我们需要进行以下几步: 创建…

    C# 2023年6月1日
    00
  • ASP.NET Core使用固定窗口限流

    关于“ASP.NET Core使用固定窗口限流”的完整攻略,我会给你一个详细的解释: 什么是固定窗口限流 固定窗口限流是一种常用的限流算法,它将时间分成固定的窗口,每个窗口内的请求次数不能超过一定的阈值。举个例子:如果我们将时间分成1秒钟的窗口,设置每个窗口内最多只能处理10个请求,那么当某个窗口内的请求数超过10个时,则该窗口内的请求需要被限制。 如何使用…

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