c#实现多线程局域网聊天系统

C#实现多线程局域网聊天系统攻略

前言

本文介绍如何使用C#语言编写多线程局域网聊天系统。局域网聊天系统主要用于小范围内的通信,可以在公司、学校或家庭之间使用。使用多线程技术可以提升系统的并发性能,增强用户体验。本文将使用Visual Studio开发工具来进行程序设计和实现。

程序设计

整体架构

  1. 客户端程序:用于与其他用户进行通信和交流,需要与服务器程序进行通信才能实现聊天。
  2. 服务器程序:用于处理客户端程序的请求和数据,主要职责为消息转发和数据处理,保证系统并发性能和数据的完整性。

程序实现

下面将详细介绍如何实现客户端程序和服务器程序。

客户端程序

客户端程序需要完成以下几个功能:

  1. 登录服务器:通过输入IP地址或域名登录到局域网聊天室。
  2. 发送消息:将消息发送给其他在线用户。
  3. 接收消息:接收其他用户发送的消息,实现即时通讯的效果。
  4. 退出系统:用户退出系统时需要向服务器发送退出消息,以便服务器更新用户状态。

以下是示例代码:

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

public class Client {
    private TcpClient client;
    private NetworkStream stream;
    private Thread thread;

    public Client(string serverIP, int serverPort) {
        client = new TcpClient(serverIP, serverPort);

        stream = client.GetStream();

        thread = new Thread(new ThreadStart(DoWork));
        thread.Start();
    }

    private void DoWork() {
        Console.WriteLine("Connected to chat room server!");

        while (true) {
            byte[] buffer = new byte[1024];
            int len = stream.Read(buffer, 0, buffer.Length);
            string message = Encoding.UTF8.GetString(buffer, 0, len);

            Console.WriteLine("Received message: " + message);
        }
    }

    public void SendMessage(string message) {
        byte[] buffer = Encoding.UTF8.GetBytes(message);
        stream.Write(buffer, 0, buffer.Length);
    }

    public void Close() {
        thread.Abort();
        stream.Close();
        client.Close();
    }
}

服务器程序

服务器程序需要完成以下几个功能:

  1. 监听端口:监听指定的端口,等待客户端连接。
  2. 处理客户端请求:处理客户端发送的请求,包括登录、发送消息和退出系统。
  3. 转发消息:将客户端发送的消息转发给其他在线用户。
  4. 保持服务:持续为客户端提供服务,保证系统的可用性和并发性能。

以下是示例代码:

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

public class Server {
    private TcpListener listener;
    private Dictionary<string, TcpClient> clients;
    private Thread thread;

    public Server(int port) {
        listener = new TcpListener(IPAddress.Any, port);

        clients = new Dictionary<string, TcpClient>();

        thread = new Thread(new ThreadStart(DoWork));
        thread.Start();
    }

    private void DoWork() {
        listener.Start();

        Console.WriteLine("Chat room server was started!");

        while (true) {
            TcpClient client = listener.AcceptTcpClient();
            Thread thread = new Thread(new ParameterizedThreadStart(HandleClient));
            thread.Start(client);
        }
    }

    private void HandleClient(object obj) {
        TcpClient client = obj as TcpClient;

        string ip = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();
        clients.Add(ip, client);
        Console.WriteLine(ip + " joined the chat room!");

        NetworkStream stream = client.GetStream();

        while (true) {
            byte[] buffer = new byte[1024];
            int len = stream.Read(buffer, 0, buffer.Length);
            string message = Encoding.UTF8.GetString(buffer, 0, len);

            Console.WriteLine(ip + " sent a message: " + message);
            Broadcast(ip, message);
        }
    }

    private void Broadcast(string ip, string message) {
        foreach (var item in clients) {
            if (item.Key != ip) {
                TcpClient client = item.Value;
                NetworkStream stream = client.GetStream();

                byte[] buffer = Encoding.UTF8.GetBytes(message);
                stream.Write(buffer, 0, buffer.Length);
            }
        }
    }

    public void Close() {
        thread.Abort();
        listener.Stop();
    }
}

总结

本文介绍了使用C#语言实现多线程局域网聊天系统的攻略,主要分为客户端程序和服务器程序两个部分。通过本文所列示的代码,可以在Visual Studio中编写代码,快速搭建出一个简单的局域网聊天系统。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#实现多线程局域网聊天系统 - Python技术站

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

相关文章

  • 使用位运算实现网页中的过滤、筛选功能实例

    使用位运算实现网页中的过滤、筛选功能,通常适用于多选项、多条件的情况下,可以大大提高筛选的效率和处理速度。下面我会给出一个完整攻略,包含示例说明。 步骤一:建立数据标记规则 在使用位运算进行网页过滤、筛选时,首先要建立数据标记规则。这个规则可以是二进制中的 1 和 0,也可以是其他数字、字符等。 例如,在一家电商网站中,有多个筛选条件,比如价格、品牌、颜色、…

    C# 2023年6月7日
    00
  • c#基于winform制作音乐播放器

    C#基于Winform制作音乐播放器攻略 准备工作 确认已安装好 .NET Framework,本攻略基于.NET Framework 4.8进行讲解 了解Windows多媒体API Windows Media Player Control,本攻略使用此控件实现音乐播放器 步骤 1. 创建Winform应用程序 在Visual Studio中,打开File-…

    C# 2023年6月6日
    00
  • Winform学生信息管理系统各子窗体剖析(3)

    首先需要明确一下,这篇文章是对Winform学生信息管理系统中各子窗体的剖析,本文分析的是第三部分,主要涉及的子窗体包括“学生公寓管理”、“学生缴费管理”、“学生考勤管理”和“学生成绩管理”。 学生公寓管理 学生公寓管理子窗体主要用于管理学生的住宿信息,包括宿舍楼、房间、住宿人员等信息。具体的功能如下: 宿舍楼管理:可以添加、修改、删除宿舍楼信息; 房间管理…

    C# 2023年6月2日
    00
  • 使用.NET升级助手将.NET Framework项目升级为.NET 6

    下面是使用.NET升级助手将.NET Framework项目升级为.NET 6的完整攻略: 一、准备工作 在进行.NET Framework项目升级时, 应该先行备份项目源代码和相关配置文件,以便在升级过程中出现问题时进行恢复。此外,还需要先行安装.NET 6 SDK和Visual Studio 2019或更高版本。 二、升级.NET Framework项目…

    C# 2023年6月3日
    00
  • C# File.ReadAllBytes – 读取文件的字节数组

    File.ReadAllBytes 方法是C#中的一个静态方法,用于读取指定文件的所有字节并将其存储为字节数组。该方法的使用方法可分为以下几个步骤: 引入System.IO命名空间 在使用该方法前需要先引入System.IO命名空间,因为该方法位于System.IO命名空间下。 using System.IO; 调用File.ReadAllBytes方法 在…

    C# 2023年4月19日
    00
  • C#获取CPU处理器核心数量的方法

    获取CPU处理器核心数量是一项常见的系统信息查询任务,本文将详细讲解C#获取CPU处理器核心数量的方法。 1. .NET Framework中获取CPU核心数量的方法 .NET Framework提供了一个名为Environment的类,可以使用该类的ProcessorCount属性轻松地获取CPU核心数量。 int coreCount = Environm…

    C# 2023年6月2日
    00
  • C# 递归算法详解

    C# 递归算法详解 什么是递归算法? 递归算法是一种基于函数调用的算法,它通过函数不断地调用自身来解决问题。在使用递归算法时,程序会将问题分解为更小的子问题,并不断递归地调用函数来解决这些子问题。递归算法适用于解决需要重复进行相同操作的问题,例如对某个数据结构进行遍历,或者对某段数据进行处理。 递归算法的应用场景 递归算法广泛应用于以下场景: 数据结构的遍历…

    C# 2023年6月6日
    00
  • C#判断某程序是否运行的方法

    为了判断某程序是否运行,可以使用C#中的System.Diagnostics命名空间下的Process类和相关方法。具体步骤如下: 引用System.Diagnostics命名空间 在代码文件顶部使用using关键字引用System.Diagnostics命名空间,代码如下: using System.Diagnostics; 构造Process类对象 使用…

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