C#中Socket通信用法实例详解

C#中Socket通信用法实例详解

1. 简介

本文将详细讲解 C#中 Socket 通信的用法以及实例。Socket 是即插即用的通用数据交换接口,常用于不同操作系统、不同软件之间的通信。在 C# 中,通过 System.Net.Sockets 命名空间下的实现,可以轻松实现 Socket 通信,可以方便地实现 TCP、UDP 等协议。

2. 实例1:C#中基于TCP协议实现Socket通信

我们首先通过一个简单的示例来详细讲解如何在 C# 中基于 TCP 协议实现 Socket 通信。

以下是客户端代码:

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

class Client {
    public static void Main() {
        // 创建一个 TCP/IP socket.
        Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        // 连接到远程 endpoint
        IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 11000);

        try {
            // 向服务器端发起连接请求
            clientSocket.Connect(remoteEP);

            Console.WriteLine("Socket 连接到 " + clientSocket.RemoteEndPoint.ToString());

            // 发送数据到服务器端
            byte[] msg = Encoding.ASCII.GetBytes("Hello from client");
            clientSocket.Send(msg);

            // 从服务器端接收响应
            byte[] responseMsg = new byte[1024];
            int responseSize = clientSocket.Receive(responseMsg);
            Console.WriteLine("接收到的响应: " + Encoding.ASCII.GetString(responseMsg, 0, responseSize));

            // 关闭连接
            clientSocket.Shutdown(SocketShutdown.Both);
            clientSocket.Close();
        } catch (Exception ex) {
            Console.WriteLine(ex.ToString());
        }
    }
}

以下是服务器端代码:

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

class Server {
    public static void Main() {
        // 数据缓冲区
        byte[] buffer = new byte[1024];

        // 服务器监听IP地址及端口
        IPEndPoint serverIP = new IPEndPoint(IPAddress.Any, 11000);

        // 创建TCP/IP socket
        Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        try {
            // 绑定到本地端点并启动监听
            serverSocket.Bind(serverIP);
            serverSocket.Listen(10);

            Console.WriteLine("等待客户端连接...");

            // 接受客户端请求
            Socket clientSocket = serverSocket.Accept();

            Console.WriteLine("客户端连接成功:" + clientSocket.RemoteEndPoint.ToString());

            // 接收来自客户端的请求
            int size = clientSocket.Receive(buffer);
            Console.WriteLine("接收到客户端请求: " + Encoding.ASCII.GetString(buffer, 0, size));

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

            // 关闭连接
            clientSocket.Shutdown(SocketShutdown.Both);
            clientSocket.Close();
        } catch (Exception ex) {
            Console.WriteLine(ex.ToString());
        }
    }
}

运行上述代码,将会打印出类似如下的输出:

等待客户端连接...
客户端连接成功:127.0.0.1:59806
接收到客户端请求: Hello from client

3. 示例2:C#中基于UDP协议实现Socket通信

接下来,我们通过另一个示例来详细讲解如何在 C# 中基于 UDP 协议实现 Socket 通信。

以下是客户端代码:

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

class Client {
    public static void Main() {
        // 创建UDP socket
        Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

        // 发送数据到服务器端
        IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 11000);
        byte[] msg = Encoding.ASCII.GetBytes("Hello from client using UDP");
        clientSocket.SendTo(msg, remoteEP);

        // 接收服务器端的响应
        EndPoint remoteAddr = new IPEndPoint(IPAddress.Any, 0);
        byte[] buffer = new byte[1024];
        int responseSize = clientSocket.ReceiveFrom(buffer, ref remoteAddr);
        Console.WriteLine("来自服务器端的响应: " + Encoding.ASCII.GetString(buffer, 0, responseSize));

        // 关闭Socket
        clientSocket.Close();
    }
}

以下是服务器端代码:

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

class Server {
    public static void Main() {
        // 创建UDP socket
        Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

        // 绑定服务器 IP 和端口
        IPEndPoint serverEP = new IPEndPoint(IPAddress.Any, 11000);
        serverSocket.Bind(serverEP);

        // 接收客户端的请求
        EndPoint remoteAddr = new IPEndPoint(IPAddress.Any, 0);
        byte[] buffer = new byte[1024];
        int size = serverSocket.ReceiveFrom(buffer, ref remoteAddr);
        Console.WriteLine("来自客户端的请求: " + Encoding.ASCII.GetString(buffer, 0, size));

        // 向客户端发送响应
        byte[] responseMsg = Encoding.ASCII.GetBytes("Hi, client using UDP!");
        serverSocket.SendTo(responseMsg, remoteAddr);

        // 关闭Socket
        serverSocket.Close();
    }
}

运行上述代码,将会打印出类似如下的输出:

来自客户端的请求: Hello from client using UDP

4. 结论

通过上例的讲解,我们可以得出以下结论:

  • 在 C# 中,通过 System.Net.Sockets 命名空间下的实现,可以轻松实现 Socket 通信;
  • Socket 是即插即用的通用数据交换接口,常用于不同操作系统、不同软件之间的通信;
  • 可以使用 TCP、UDP 等协议实现 Socket 通信;
  • 在实现 Socket 通信时,需要特别注意数据包大小和传输协议等因素。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中Socket通信用法实例详解 - Python技术站

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

相关文章

  • C#将数字转换成字节数组的方法

    要将一个数字转换成字节数组,我们可以使用C#中的BitConverter.GetBytes方法。该方法接受一个long,int,short,ulong,uint,ushort,double,float或decimal型式的数字,并将其转换为字节数组。 具体步骤如下: 使用BitConverter.GetBytes方法将数字转换为字节数组。例如: int nu…

    C# 2023年6月7日
    00
  • 详解c#读取XML的实例代码

    下面我将为你详细讲解C#读取XML的实例代码攻略。 首先,我们需要引入System.Xml文件,它提供了访问和处理XML文档的类。 using System.Xml; 接着我们需要读取XML文件,可以使用XmlDocument类。以下是读取XML文件的示例代码: XmlDocument xmlDoc = new XmlDocument(); xmlDoc.L…

    C# 2023年5月14日
    00
  • C#网络编程中常用特性介绍

    C#网络编程中常用特性介绍 在C#网络编程中,有很多常用特性值得去了解和掌握。下面将会介绍几个常用的特性及其用法。 1. Socket Socket是建立网络连接最基础的类之一。它提供了一组通信协议,并在套接字上实现这些协议。以下是一个简单的Socket示例,用于连接服务器、发送数据和接收数据。 using System; using System.Net;…

    C# 2023年6月7日
    00
  • Winform下实现图片切换特效的方法

    首先我们需要明确一下,Winform是一个Windows桌面应用程序,为了实现图片切换特效,我们需要使用C#编写程序,下面是实现图片切换特效的方法: 1. 准备工作 在 Visual Studio 中创建一个 Winform 应用程序项目,然后在主窗体中添加一个 Picturebox 控件,用于展示图片切换效果。 2. 加载图片资源 为了实现图片切换特效,我…

    C# 2023年6月7日
    00
  • 如何从dump文件中提取出C#源代码

    下面是从dump文件中提取C#源码的完整攻略: 一、准备工作 首先需要将dump文件转换成可读取的文件。这可以通过使用Debugging Tools for Windows中的cdb.exe来完成。在命令行中运行以下命令进行转换: cdb -z dumpfile.dmp -logo outfile.txt -c ".cordll -ve -u -l…

    C# 2023年5月15日
    00
  • c#使用process.start启动程序报错解决方法

    下面为你讲解一下“c#使用process.start启动程序报错解决方法”的完整攻略。 问题描述 在使用 C# 的 Process.Start() 方法启动程序时,可能会遇到以下报错信息: System.ComponentModel.Win32Exception (0x80004005): 系统找不到指定的文件。 at System.Diagnostics.…

    C# 2023年5月15日
    00
  • JSP动态输出Excel及中文乱码的解决

    JSP动态输出Excel及中文乱码的解决 在JSP中,我们可以使用POI库动态输出Excel文件,实现数据导出的功能。但是,在输出Excel文件时,中文字符可能会出现乱码的情况。本文将详细介绍JSP动态输出Excel及中文乱码的解决方法,包括代码实现和注意事项等。 步骤一:导入POI库 要使用POI库动态输出Excel文件,我们首先需要导入POI库。POI库…

    C# 2023年5月15日
    00
  • C#实现常见加密算法的示例代码

    C#实现常见加密算法的示例代码 本篇攻略将会针对C#语言来实现几种常见的加密算法,包括MD5哈希、SHA-1哈希、AES对称加密、RSA非对称加密和Base64编码等。我们将会给出具体的实现代码,并接合实例说明,方便大家在实际开发中使用。 MD5哈希 MD5消息摘要算法常用于数据传输过程中的完整性校验,或者用于保证敏感数据的安全。 示例1:字符串的MD5哈希…

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