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日

相关文章

  • Winform 实现进度条弹窗和任务控制

    针对“Winform 实现进度条弹窗和任务控制”的问题,我来给出一份完整攻略。 1. 实现进度条弹窗的一般步骤 在 Winform 中实现进度条弹窗的一般步骤如下: 1.1 创建进度条窗口 首先,创建一个新的窗口,用于展示进度条。 1.2 创建进度条控件 在进度条窗口中创建一个进度条控件,用于展示当前进度。 1.3 显示进度条窗口 使用 ShowDialog…

    C# 2023年6月6日
    00
  • C# 以MDF文件链接数据库的示例代码

    下面是详细讲解 “C# 以MDF文件链接数据库的示例代码”的完整攻略: 一、前置条件 在编写 C# 代码之前,需要先安装 Microsoft SQL Server 以及 Visual Studio 等开发工具。安装步骤可以参考其官方文档进行。 二、创建 MDF 文件 在 SQL Server Management Studio 中创建一个新的数据库,设置其名…

    C# 2023年6月2日
    00
  • C#代码实现扑克牌排序的几种方式

    C#代码实现扑克牌排序的几种方式 1. 排序算法简介 排序算法是计算机程序设计中重要的算法之一,其目的是把一组无序的数据按照一定的顺序排列。排序算法在许多领域中都有广泛的应用,如在数据库中对数据进行排序,对数据结构中的元素进行排序等。 目前常用的排序算法有插入排序、冒泡排序、选择排序、快速排序、归并排序等。其中,插入排序、冒泡排序、选择排序是比较基础和简单的…

    C# 2023年6月7日
    00
  • C#中的分布式ID生成组件IDGen介绍并给出示例代码

    C#中的IDGen是一个C#实现的Twitter Snowflake算法的ID生成器,可以生成全局唯一的ID,支持高并发场景下的ID生成。在本篇文章中,我们将介绍IDGen的使用方法并提供相关的C#示例代码。 IDGen的介绍 IDGen是一款开源的分布式唯一ID生成器,支持多种ID生成算法,并且可以在高并发场景下快速生成全局唯一的ID。目前支持的ID生成算…

    C# 2023年4月22日
    00
  • 各种AJAX方法的使用比较详解

    AJAX(Asynchronous JavaScript and XML)是一种用于创建异步Web应用程序的技术。它可以在不刷新整个页面的情况下更新部分页面内容,提高Web应用程序的响应速度和用户体验。本文将介绍各种AJAX方法的使用,包括XMLHttpRequest、jQuery AJAX和Fetch API。 XMLHttpRequest XMLHttp…

    C# 2023年5月15日
    00
  • c#连接mdf文件示例分享

    我们来详细讲解一下“C#连接MDF文件示例分享”的完整攻略。 什么是MDF文件? MDF文件是SQL Server数据库主文件的扩展名,它记录了SQL Server数据库的主要数据。在C#语言中,我们使用连接字符串来连接MDF文件,并进行数据库的相关操作。 连接MDF文件的准备工作 在进行连接操作之前,我们需要进行一些准备工作,这里有两个示例: 示例1:安装…

    C# 2023年5月31日
    00
  • C#调用C++版本dll时的类型转换需要注意的问题小结

    以下是详细的攻略。 标题 “C#调用C++版本dll时的类型转换需要注意的问题小结” 前言 在C#开发中,调用C++版本的dll时,需要进行类型转换。若不注意,可能会出现类型转换错误,导致程序崩溃。因此需要注意一些问题。 正文 问题1:传递指针类型 在C#中无法直接传递C++中的指针类型,需要通过IntPtr类型进行转换。 例如,C++中的函数声明如下: v…

    C# 2023年5月15日
    00
  • asp.net+ajax简单分页实例分析

    下面是“asp.net+ajax简单分页实例分析”的完整攻略: 一、简介 本文将介绍如何使用asp.net和ajax实现简单分页。在实现分页功能的同时,还同时实现了搜索功能和动态加载数据的效果。 二、环境准备 在开始编写代码之前,需要确保以下工具和环境已经安装: Visual Studio 2017 .NET Framework 4.5 jQuery(最好使…

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