Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# socket服务端连接多个客户端

作者:冷空气来袭   发布日期:2026-05-14   浏览:85

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

class Server
{
    private static TcpListener listener;

    public static void Main()
    {
        // 设置服务器监听的IP和端口
        IPAddress ipAddress = IPAddress.Any;
        int port = 5000;
        listener = new TcpListener(ipAddress, port);
        listener.Start();
        Console.WriteLine("服务器已启动,等待客户端连接...");

        // 启动一个线程来处理客户端连接
        Thread listenThread = new Thread(ListenForClients);
        listenThread.Start();

        // 主线程可以继续其他工作或等待用户输入
        Console.ReadLine();
    }

    private static void ListenForClients()
    {
        while (true)
        {
            // 等待客户端连接
            TcpClient client = listener.AcceptTcpClient();
            Console.WriteLine("新客户端已连接");

            // 启动一个新线程来处理这个客户端
            Thread clientThread = new Thread(HandleClientComm);
            clientThread.Start(client);
        }
    }

    private static void HandleClientComm(object client)
    {
        TcpClient tcpClient = (TcpClient)client;
        NetworkStream clientStream = tcpClient.GetStream();

        byte[] message = new byte[4096];
        int bytesRead;

        while (true)
        {
            bytesRead = 0;

            try
            {
                // 从客户端读取消息
                bytesRead = clientStream.Read(message, 0, 4096);
            }
            catch
            {
                // 如果读取失败,表示客户端断开连接
                break;
            }

            if (bytesRead == 0)
            {
                // 客户端断开连接
                break;
            }

            // 将接收到的消息转换为字符串并输出
            string receivedMessage = Encoding.ASCII.GetString(message, 0, bytesRead);
            Console.WriteLine("收到消息: " + receivedMessage);

            // 回复客户端
            byte[] response = Encoding.ASCII.GetBytes("消息已收到");
            clientStream.Write(response, 0, response.Length);
        }

        tcpClient.Close();
        Console.WriteLine("客户端已断开连接");
    }
}

解释说明:

  1. 设置服务器监听:使用 TcpListener 类来创建一个监听器,绑定到指定的 IP 地址和端口。
  2. 多线程处理客户端连接:每当有新的客户端连接时,服务器会启动一个新的线程来处理该客户端的通信。这样可以同时处理多个客户端连接。
  3. 接收和发送数据:每个客户端连接在一个单独的线程中运行,通过 NetworkStream 进行数据的读写操作。
  4. 异常处理:在读取数据时捕获异常,以处理客户端断开连接的情况。
  5. 关闭连接:当客户端断开连接时,关闭对应的 TcpClient 和线程。

这段代码展示了如何使用 C# 实现一个简单的 Socket 服务器,能够同时处理多个客户端连接。

上一篇:c# datatable group by

下一篇:c# 创建目录

大家都在看

c# 二进制

c# 创建目录

c# socket服务端连接多个客户端

c# datatable group by

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

c# invoke方法

.net和c#

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站