C#之Socket(套接字)通信

下面是关于“C#之Socket(套接字)通信”的完整攻略。

一、Socket(套接字)通信简介

Socket(套接字)是网络编程中的一个概念,主要用于实现网络通信。在Socket通信中,可以使用多种协议进行通信,如TCP、UDP等。

在C#中,Socket通信主要是通过System.Net命名空间中的一些类和接口实现的。

二、Socket(套接字)通信流程

在C#中,Socket(套接字)通信的基本流程如下:

  1. 创建Socket对象

    首先需要通过创建Socket对象来实现通信。在C#中,可以使用Socket类的构造函数来创建Socket对象:

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

    上面的代码中,AddressFamily.InterNetwork表示Socket使用IPv4地址,SocketType.Stream表示基于流的TCP协议,ProtocolType.Tcp表示使用TCP协议。

  2. 连接Socket

    在创建Socket对象之后,需要使用Connect方法来连接服务器:

    csharp
    socket.Connect(ip, port);

    其中,ip是服务器的IP地址,port是服务器的端口号。

  3. 发送数据

    使用Socket对象的Send方法来发送数据:

    csharp
    byte[] sendBytes = Encoding.ASCII.GetBytes("Hello, server!");
    socket.Send(sendBytes);

    上面的代码中,首先将字符串转换成字节数组,然后调用Socket对象的Send方法发送数据。

  4. 接收数据

    通过Socket对象的Receive方法来接收服务器返回的数据:

    csharp
    byte[] receiveBytes = new byte[1024];
    int numBytes = socket.Receive(receiveBytes);
    string receivedMessage = Encoding.ASCII.GetString(receiveBytes, 0, numBytes);
    Console.WriteLine("Received message: {0}", receivedMessage);

    上面的代码中,首先定义一个字节数组用于接收数据,然后调用Socket对象的Receive方法接收数据,并将其转换成字符串。

  5. 关闭Socket

    在使用完Socket对象之后,需要通过调用Close方法来关闭Socket:

    csharp
    socket.Close();

    如果还需要重新使用Socket对象进行通信,可以再次调用Connect方法连接服务器。

三、示例1:使用Socket实现服务器端

下面是一个使用Socket实现服务器端的示例代码:

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

public class Server {
    public static void Main() {
        int port = 12345;

        // 创建Socket对象
        Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        // 绑定IP地址和端口号
        IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, port);
        listener.Bind(localEndPoint);

        // 开始监听端口
        listener.Listen(10);
        Console.WriteLine("Server started listening on port {0}", port);

        while (true) {
            Console.WriteLine("Waiting for a connection...");

            // 接收客户端连接
            Socket clientSocket = listener.Accept();
            Console.WriteLine("Client connected: {0}", clientSocket.RemoteEndPoint);

            // 接收客户端发送的数据
            byte[] receiveBytes = new byte[1024];
            int numBytes = clientSocket.Receive(receiveBytes);
            string receivedMessage = Encoding.ASCII.GetString(receiveBytes, 0, numBytes);
            Console.WriteLine("Received message: {0}", receivedMessage);

            // 向客户端发送数据
            byte[] sendBytes = Encoding.ASCII.GetBytes("Hello, client!");
            clientSocket.Send(sendBytes);

            // 关闭Socket
            clientSocket.Close();
            Console.WriteLine("Client disconnected.");
        }
    }
}

上面的代码中,首先创建了一个Socket对象,并绑定IP地址和端口号。然后通过调用Listen方法开始监听端口。

在等待客户端连接时,使用Accept方法接收连接并返回一个新的Socket对象,该Socket对象用于和客户端通信。

在收到客户端发送的数据后,通过调用Socket对象的Send方法向客户端发送数据,并在完成通信后关闭Socket对象。

四、示例2:使用Socket实现客户端

下面是一个使用Socket实现客户端的示例代码:

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

public class Client {
    public static void Main() {
        string ip = "127.0.0.1";
        int port = 12345;

        // 创建Socket对象
        Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        // 连接服务器
        socket.Connect(ip, port);
        Console.WriteLine("Connected to server: {0}", socket.RemoteEndPoint);

        // 发送数据
        byte[] sendBytes = Encoding.ASCII.GetBytes("Hello, server!");
        socket.Send(sendBytes);

        // 接收数据
        byte[] receiveBytes = new byte[1024];
        int numBytes = socket.Receive(receiveBytes);
        string receivedMessage = Encoding.ASCII.GetString(receiveBytes, 0, numBytes);
        Console.WriteLine("Received message: {0}", receivedMessage);

        // 关闭socket
        socket.Close();
        Console.WriteLine("Disconnected from server.");
    }
}

上面的代码中,首先创建了一个Socket对象,并通过调用Connect方法连接服务器。

接着使用Socket对象的Send方法发送数据,并通过Socket对象的Receive方法接收服务器返回的数据。

在完成通信后,通过调用Close方法关闭Socket对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#之Socket(套接字)通信 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C#中的图像Image类与打印Printing类用法

    C#中的图像Image类与打印Printing类用法攻略 概述 在C#中,Image类和Printing类都是常用的操作图像和打印的类,它们提供了丰富的方法和属性,可以方便地实现各种图像的处理和打印。 Image类:Image类是用于操作图像的类,可以将图像加载到内存中、进行绘制、剪切等操作。 Printing类:Printing类是用于打印的类,可以控制打…

    C# 2023年6月8日
    00
  • C# GetTypeCode():获取此实例的类型代码

    C#中的GetTypeCode()方法是返回值类型的枚举值,它指示指定对象的基础类型。 该方法的完整格式如下: public virtual TypeCode GetTypeCode (); 它是System.Object类型的一个实例方法,可以用于在运行时获取对象的类型信息。该方法返回一个System.TypeCode值,该值指示对象的类型。 下面是两个示…

    C# 2023年4月19日
    00
  • .NET Core使用Eureka实现服务注册

    .NET Core使用Eureka实现服务注册 Eureka是Netflix开源的一款服务发现框架,可以用于实现微服务架构中的服务注册和发现。在.NET Core中,可以使用Steeltoe框架来集成Eureka。以下是使用Eureka实现服务注册的完整攻略。 步骤 步骤1:创建.NET Core Web API项目 首先,需要创建一个.NET Core W…

    C# 2023年5月17日
    00
  • 教你创建一个带诊断工具的.NET镜像

    教你创建一个带诊断工具的.NET镜像 在.NET应用程序中,诊断工具是一项非常重要的任务,它可以帮助您跟踪应用程序的运行情况并诊断问题。在本攻略,我们将详细讲解如何创建一个带诊断工具的.NET镜像,并提供两个示例说明。 步骤一:创建Dockerfile 要创建一个带诊断工具的.NET镜像,您需要创建一个Dockerfile。以下是Dockerfile的示例代…

    C# 2023年5月17日
    00
  • C# Convert.ToDouble()方法: 将指定的值转换为双精度浮点数

    Convert.ToDouble() 方法是 C# 中用于将指定对象转换为双精度浮点数的方法。该方法属于 System 命名空间下的 Convert 类,可以将字符串、整数等数据类型转换为双精度浮点数。其基本语法如下: Double Convert.ToDouble(Object value); 其中,value 参数类型为 Object,表示需要转换为双精…

    C# 2023年4月19日
    00
  • C#利用OLEDB实现将DataTable写入Excel文件中

    下面我将详细讲解“C#利用OLEDB实现将DataTable写入Excel文件中”的完整攻略。 1. OLEDB介绍 OLE DB 是一种标准的连接方式,支持多种数据库和文件格式,可以用于访问关系数据库、普通数据文件、Excel 和文本文件等。OLE DB 的本质是一种支持 COM 的面向 ROWSET 的标准,应用可以通过 OLE DB 访问所有遵守本标准…

    C# 2023年5月31日
    00
  • 聊一聊 dotnet-trace 调查 lock锁竞争

    一:背景 1. 讲故事 最近在分析一个 linux 上的 dump,最后的诱因是大量的lock锁诱发的高频上下文切换,虽然问题告一段落,但我还想知道一点信息,所谓的高频到底有多高频?锁竞争到底是一个怎样的锁竞争? 如果了解这些信息对我们后续分析此类问题非常有帮助。 要想获取此类信息,看 dump 肯定是没有用的,只能给程序安装一个摄像头,在 Windows …

    C# 2023年5月9日
    00
  • C# 中 Array和 ArrayList详解及区别

    C# 中 Array 和 ArrayList 详解及区别 什么是数组? 在 C# 中,数组是一种类型强制定义并具有相同数据类型的数据结构。数组的元素可以通过索引进行访问,索引是数组中元素的唯一编号,从零开始并从左到右。数组的长度是在创建数组时确定的。 什么是 ArrayList? C# 中的 ArrayList 是一个动态数组,可以根据需要自动增长和缩小其大…

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