C# Socket实现简单控制台案例

C#是一种流行的编程语言,被广泛用于网络编程。其中,C# Socket是一种常见的网络编程库,我们可以通过 Socket 实现网络通信。下面是关于如何通过 C# Socket 实现控制台案例的完整攻略。

第一步:引入命名空间

在开始之前,需要引入命名空间 System.Net.SocketsSystem.Text,以便我们使用 C# Socket 编程库。

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

第二步:创建 Socket 对象

接下来,创建一个 Socket 对象。我们可以使用静态方法 Socket() 创建一个新的 Socket 实例,通过指定 AddressFamilySocketType 参数来设置套接字地址族和套接字类型。

Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

第三步:连接服务器

使用 Socket 对象的 Connect() 方法连接服务器。需要提供服务器的 IP 地址和端口号。

IPAddress serverIP = IPAddress.Parse("127.0.0.1");
int port = 8888;
IPEndPoint serverEp = new IPEndPoint(serverIP, port);
clientSocket.Connect(serverEp);

第四步:发送数据

通过 Socket 对象的 Send() 方法发送数据。需要指定要发送的数据的字节数组。

string message = "Hello, Socket!";
byte[] messageBytes = Encoding.ASCII.GetBytes(message);
clientSocket.Send(messageBytes);

示例1:C# Socket 实现简单的客户端和服务器端通信

下面的示例演示了如何通过 C# Socket 实现简单的客户端和服务器端通信。

客户端代码:

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

class Client {
    static void Main(string[] args) {
        Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        IPAddress serverIP = IPAddress.Parse("127.0.0.1");
        int port = 8888;
        IPEndPoint serverEp = new IPEndPoint(serverIP, port);
        clientSocket.Connect(serverEp);

        string message = "Hello, Socket!";
        byte[] messageBytes = Encoding.ASCII.GetBytes(message);
        clientSocket.Send(messageBytes);

        byte[] receiveBytes = new byte[1024];
        int receiveLength = clientSocket.Receive(receiveBytes);
        string receivedMessage = Encoding.ASCII.GetString(receiveBytes, 0, receiveLength);
        Console.WriteLine(receivedMessage);

        clientSocket.Shutdown(SocketShutdown.Both);
        clientSocket.Close();
    }
}

服务器端代码:

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

class Server {
    static void Main(string[] args) {
        Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        IPAddress serverIP = IPAddress.Parse("127.0.0.1");
        int port = 8888;
        IPEndPoint serverEp = new IPEndPoint(serverIP, port);
        serverSocket.Bind(serverEp);

        serverSocket.Listen(10);

        Console.WriteLine("Server started");

        Socket clientSocket = serverSocket.Accept();

        byte[] receiveBytes = new byte[1024];
        int receiveLength = clientSocket.Receive(receiveBytes);
        string receivedMessage = Encoding.ASCII.GetString(receiveBytes, 0, receiveLength);
        Console.WriteLine(receivedMessage);

        string message = "Hello, Client!";
        byte[] messageBytes = Encoding.ASCII.GetBytes(message);
        clientSocket.Send(messageBytes);

        clientSocket.Shutdown(SocketShutdown.Both);
        clientSocket.Close();

        serverSocket.Close();
    }
}

示例2:C# Socket 实现多个客户端与服务器端通信

下面的示例演示如何通过 C# Socket 实现多个客户端与服务器端通信。服务器端可以同时接收多个客户端发送的消息。

客户端代码:

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

class Client {
    static void Main(string[] args) {
        IPAddress serverIP = IPAddress.Parse("127.0.0.1");
        int port = 8888;

        for (int i = 0; i < 5; i++) {
            Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint serverEp = new IPEndPoint(serverIP, port);
            clientSocket.Connect(serverEp);

            string message = "Hello, Socket " + i.ToString() + "!";
            byte[] messageBytes = Encoding.ASCII.GetBytes(message);
            clientSocket.Send(messageBytes);

            Thread.Sleep(1000);

            byte[] receiveBytes = new byte[1024];
            int receiveLength = clientSocket.Receive(receiveBytes);
            string receivedMessage = Encoding.ASCII.GetString(receiveBytes, 0, receiveLength);
            Console.WriteLine(receivedMessage);

            clientSocket.Shutdown(SocketShutdown.Both);
            clientSocket.Close();
        }
    }
}

服务器端代码:

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

class Server {
    static void Main(string[] args) {
        Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        IPAddress serverIP = IPAddress.Parse("127.0.0.1");
        int port = 8888;
        IPEndPoint serverEp = new IPEndPoint(serverIP, port);
        serverSocket.Bind(serverEp);

        serverSocket.Listen(10);

        Console.WriteLine("Server started");

        while (true) {
            Socket clientSocket = serverSocket.Accept();

            Thread clientThread = new Thread(() => {
                byte[] receiveBytes = new byte[1024];
                int receiveLength = clientSocket.Receive(receiveBytes);
                string receivedMessage = Encoding.ASCII.GetString(receiveBytes, 0, receiveLength);
                Console.WriteLine(receivedMessage);

                string message = "Hello, Client!";
                byte[] messageBytes = Encoding.ASCII.GetBytes(message);
                clientSocket.Send(messageBytes);

                clientSocket.Shutdown(SocketShutdown.Both);
                clientSocket.Close();
            });
            clientThread.Start();
        }

        serverSocket.Close();
    }
}

以上就是通过 C# Socket 实现控制台案例的完整攻略,包含了两个示例说明。使用 Socket 进行网络通信时,需要掌握相关的知识点,如套接字地址族和套接字类型等。希望本文对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# Socket实现简单控制台案例 - Python技术站

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

相关文章

  • C# 实现截图软件功能实例代码

    以下是详细讲解“C# 实现截图软件功能实例代码”的攻略: 什么是截图软件功能? 截图软件功能指的是能够将屏幕中的内容进行截图,并将截图保存下来的功能。实现截图软件需要使用到屏幕捕获技术以及图像处理技术。 实现截图软件的步骤 实现截图软件的步骤如下: 调用Win32API的BitBlt函数或者使用.NET Framework中提供的Graphics类来获取屏幕…

    C# 2023年5月31日
    00
  • WPF+SkiaSharp实现自绘弹幕效果

    下面是”WPF+SkiaSharp实现自绘弹幕效果”的完整攻略: 简介 WPF(Windows Presentation Foundation)是一个用于创建Windows桌面应用程序的技术,它提供了大量的视觉效果和控件,使得开发者可以快速地构建出富有表现力的用户界面。SkiaSharp是由Google开发的一个跨平台的2D图形渲染引擎,它可以实现在不同平台…

    C# 2023年6月6日
    00
  • C# 获取数据库中所有表名、列名的示例代码

    下面是关于“C# 获取数据库中所有表名、列名的示例代码”的完整攻略,以及两条示例说明。 攻略 获取数据库中所有表名、列名可以利用C#中的数据库元数据操作。可通过ADO.NET提供的DbConnection或DbDataReader对象访问元数据,其方法包括GetSchema等。这些方法可以获取关于数据库架构的信息。 下面是获取MySQL数据库中所有表名的示例…

    C# 2023年5月31日
    00
  • Asp.Net MVC中配置Serilog的方法

    Serilog是一个.NET平台上的日志库,可以方便地记录应用程序的日志信息。在Asp.Net MVC中,我们可以使用Serilog来记录应用程序的日志信息。以下是在Asp.Net MVC中配置Serilog的方法的完整攻略。 环境准备 在使用Serilog前,需要安装Serilog和Serilog.Sinks.File包。可以使用以下命令来安装Serilo…

    C# 2023年5月15日
    00
  • ASP.NET Core配置设置之Configuration包

    ASP.NET Core配置设置之Configuration包 在ASP.NET Core应用程序中,Configuration包是一个非常重要的包,它允许我们从不同的配置源中读取配置信息,并将其注入到应用程序中。本攻略将介绍如何使用Configuration包,并提供两个示例说明。 1. 安装Configuration包 在ASP.NET Core应用程序…

    C# 2023年5月16日
    00
  • SuperSocket封装成C#类库的步骤

    将SuperSocket封装成C#类库的步骤如下: 第一步,首先需要创建一个新的C#类库项目。打开Visual Studio,选择“新建项目”,选择“类库”类型并命名项目。 第二步,安装SuperSocket的NuGet包。在“解决方案资源管理器”中,右键点击“引用”文件夹,选择“管理NuGet程序包”。在搜索栏中输入“SuperSocket”,安装最新版本…

    C# 2023年6月1日
    00
  • C#实现时间戳的简单方法

    关于“C#实现时间戳的简单方法”,下面是完整的攻略: 什么是时间戳 时间戳是一种表示某个时间点的数字形式。它通常是一个长整型数值,表示某个固定时间点(如1970年1月1日00:00:00)到现在经过的毫秒数或者秒数,是一种比较方便的时间表示方式,被广泛应用于网络通讯和数据存储操作中。 实现时间戳的方法 在C#中,我们可以通过内置的DateTime类来表示日期…

    C# 2023年6月1日
    00
  • ASP.NET(C#)验证数字的两种方法

    下面将详细讲解“ASP.NET(C#)验证数字的两种方法”的完整攻略。 标题 方法一:使用TryParse函数 TryParse函数是.NET框架提供的一个很常用的函数,能够尝试将一个字符串转换为其它类型的数据,若转换成功则返回true并输出结果,否则返回false。 string inputStr = "123"; int n; boo…

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