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

yizhihongxing

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#实现学生档案查询攻略 简介 本篇攻略将为大家介绍如何使用C#语言实现学生档案查询功能。学生档案查询主要包括查询功能和显示结果功能。查询功能可根据学生姓名、学号等关键词进行查询,显示结果功能则可将查询到的数据在页面上进行展示。接下来,我们将介绍实现此功能的具体步骤。 步骤 1. 新建工程 首先,在Visual Studio中创建一个新的控制台应用程序工程。…

    C# 2023年6月2日
    00
  • C#判断一天、一年已经过了百分之多少的方法

    C#判断一天、一年已经过了百分之多少的方法需要统计日期信息并进行运算,可以使用DateTime类和TimeSpan类来实现。下面将详细讲解实现方法。 使用DateTime类获取日期信息 通过使用DateTime.Now属性,可以获取当前系统时间,包含年月日、时分秒等信息。我们可以将这个信息保存到一个DateTime类型的变量中,并获取其中的年份、月份和天数来…

    C# 2023年6月1日
    00
  • C#控制台基础 List泛型集合与对应的数组相互转换实现代码

    下面是C#控制台基础 List泛型集合与对应的数组相互转换实现代码的完整攻略。 一、List泛型集合与数组的区别 List泛型集合和数组都可以用来存储一组数据,但二者在使用上有些许不同。主要区别如下: 数组的长度是固定的,一旦定义了长度就无法再改变;而List泛型集合的长度是可变的,可以随时添加或删除元素。 数组的元素只能是一种数据类型,而List泛型集合可…

    C# 2023年6月1日
    00
  • 详解C#用new和override来实现抽象类的重写区别

    下面我将详细讲解“详解C#用new和override来实现抽象类的重写区别”的完整攻略。 什么是抽象类 抽象类是一个不能被实例化的类,通常被用来定义和封装一些通用的属性或方法,子类必须继承并实现这些抽象类中定义的方法。 在C#中,抽象类使用abstract关键字来进行定义,定义格式为: public abstract class MyClass { //类成…

    C# 2023年5月15日
    00
  • ASP.NET的实用技巧详细介绍

    ASP.NET的实用技巧详细介绍 什么是ASP.NET ASP.NET 是一种用于构建 Web 应用程序的框架,它是从 ASP 框架发展而来的,是一个服务器端的 Web 应用程序框架,由微软公司开发。ASP.NET 支持多种编程语言,如 VB.NET 、C#,在 Windows 平台上运行,可以自由地创建 Web 服务和动态网页应用程序。 ASP.NET的实…

    C# 2023年6月3日
    00
  • 详解C#中的Async和Await用法

    下面是《详解C#中的Async和Await用法》的完整攻略: 1. Async 和 Await 是什么 async 和 await 是 C# 语言中异步编程的关键词,使用这两个关键词可以让我们更方便地编写异步的代码。async 用于标记方法为异步方法,await 用于挂起异步方法并等待异步方法返回结果。 2. 异步方法的定义 异步方法的定义类似于普通方法,只…

    C# 2023年6月6日
    00
  • C# 将数据库SqlServer数据绑定到类中的过程详解

    标题 C# 将数据库 SqlServer 数据绑定到类中的过程详解 简介 本篇攻略主要介绍 C# 中如何将数据库 SqlServer 数据绑定到类中,从而方便数据操作和管理。 过程分析 3.1 使用 DataSet 进行绑定 在 C# 中,使用 DataSet 对象可以将数据库中的数据绑定到类中。具体操作步骤如下: (1)建立 C# 项目,并在项目中添加 S…

    C# 2023年6月2日
    00
  • 解决import包时报 Java 程序包不存在的问题

    在Java开发中,我们经常需要引入其他包中的类或接口。但有时候在import包时会出现Java程序包不存在的问题。以下是解决import包时报Java程序包不存在的问题的完整攻略。 环境准备 在解决import包时报Java程序包不存在的问题前,需要确保以下环境已经准备好: JDK已经安装并配置好了环境变量。 项目中已经添加了需要引入的包的依赖。 解决imp…

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