legongju.com
我们一直在努力
2025-01-07 17:39 | 星期二

C#实现TCP/IP服务器端技巧

在C#中,实现TCP/IP服务器端可以使用System.Net.Sockets命名空间中的TcpListenerTcpClient

  1. 引入必要的命名空间:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
  1. 创建一个TCP服务器类:
public class TcpServer
{
    private TcpListener _listener;
    private bool _isRunning;

    public TcpServer(int port)
    {
        _listener = new TcpListener(IPAddress.Any, port);
    }

    public void Start()
    {
        _isRunning = true;
        _listener.Start();
        Console.WriteLine("服务器已启动,正在监听客户端连接...");

        while (_isRunning)
        {
            // 当有客户端连接时,AcceptTcpClient会返回一个新的TcpClient实例
            TcpClient client = _listener.AcceptTcpClient();
            Console.WriteLine("客户端已连接:{0}", client.Client.RemoteEndPoint);

            // 处理客户端请求
            Thread clientThread = new Thread(HandleClient);
            clientThread.Start(client);
        }
    }

    public void Stop()
    {
        _isRunning = false;
        _listener.Stop();
        Console.WriteLine("服务器已停止。");
    }

    private void HandleClient(object obj)
    {
        TcpClient client = (TcpClient)obj;
        NetworkStream stream = client.GetStream();

        try
        {
            byte[] buffer = new byte[1024];
            int bytesRead;

            while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
            {
                string receivedData = https://www.yisu.com/ask/Encoding.UTF8.GetString(buffer, 0, bytesRead);"收到来自客户端的数据:{0}", receivedData);

                // 处理客户端发送的数据
                string response = "你好,我已经收到了你的消息:" + receivedData;
                byte[] responseData = https://www.yisu.com/ask/Encoding.UTF8.GetBytes(response);"处理客户端请求时出错:{0}", ex.Message);
        }
        finally
        {
            stream.Close();
            client.Close();
        }
    }
}
  1. 在主程序中使用TCP服务器类:
class Program
{
    static void Main(string[] args)
    {
        TcpServer server = new TcpServer(8080);
        server.Start();

        Console.WriteLine("按任意键停止服务器...");
        Console.ReadKey();

        server.Stop();
    }
}

这个示例展示了如何使用C#创建一个简单的TCP/IP服务器端。服务器监听指定端口(在本例中为8080),并在接收到客户端连接时创建一个新线程来处理客户端请求。处理客户端请求时,服务器读取客户端发送的数据,然后向客户端发送一条响应消息。要停止服务器,只需按下任意键即可。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/88990.html

相关推荐

  • 如何在C++项目中集成第三方类库

    如何在C++项目中集成第三方类库

    在C++项目中集成第三方类库通常包括以下几个步骤: 下载并安装第三方类库:
    首先,你需要从官方网站或其他可信来源下载第三方类库的源代码或预编译的二进制...

  • C++类库的性能优化方法有哪些

    C++类库的性能优化方法有哪些

    在C++类库的性能优化中,有许多方法可以提高代码的运行效率和程序的整体性能。以下是一些常见的性能优化技巧: 使用const和inline关键字:const关键字用于定义常...

  • 如何选择合适的C++类库

    如何选择合适的C++类库

    选择合适的C++类库是确保项目成功的关键因素之一。以下是一些选择C++类库的标准和步骤,以及一些推荐的类库和注意事项。
    选择C++类库的标准 项目需求:明确...

  • C++中常用的类库有哪些

    C++中常用的类库有哪些

    在C++中,有许多常用的类库可以帮助开发者更高效地编写代码。以下是一些最常用和流行的C++类库: 标准模板库(STL) STL包含了一系列高效的、通用的模板类和函数...

  • oracle的procedure有哪些限制

    oracle的procedure有哪些限制

    Oracle 中的 procedure(存储过程)具有一定的限制,这些限制主要包括以下几点: 最大长度:存储过程的最大长度为 32767 字节。
    参数个数:存储过程的参数个...

  • oracle的procedure安全性如何保障

    oracle的procedure安全性如何保障

    Oracle 的 procedure 安全性可以通过以下几个方面来保障: 权限控制:确保只有具有相应权限的用户才能执行存储过程。通过为用户分配角色和权限,可以限制对数据库...

  • oracle的procedure错误怎么处理

    oracle的procedure错误怎么处理

    当在Oracle中遇到存储过程(Procedure)错误时,可以通过以下步骤进行处理: 查看错误信息:首先,查看Oracle返回的错误信息。这将帮助你了解问题所在。错误信息...

  • 怎样调试oracle的procedure

    怎样调试oracle的procedure

    要调试Oracle的存储过程,可以使用Oracle SQL Developer或者PL/SQL Developer等工具。这里以Oracle SQL Developer为例,介绍如何调试存储过程: 安装并配置Oracl...