C# Socket 编程

2024 年 8 月 29 日 | 4 分钟阅读

引言

C# 是一种功能强大且流行的编程语言,已被用于开发各种各样的应用程序。其主要优势之一是它能够进行 Socket 编程,这使得开发人员可以创建能够通过网络与其他设备或应用程序通信的应用程序。在本文中,我们将深入探讨 C# Socket 编程的基础知识以及如何使用它来创建网络应用程序。

什么是套接字 (Sockets)?

如果两个程序在同一个网络上运行,并且它们共享一个双向通信链接,那么它们的端点将由套接字 (Socket) 表示。一个套接字的特征是其**IP 地址、端口号**和**协议**。它用于建立连接、发送和接收信息以及关闭连接。

Socket 类型

通常有两种类型的套接字:一种是**流套接字 (Stream Sockets)**,第二种是**数据报套接字 (Datagram Sockets)**。**流套接字**是面向连接的,并在设备之间提供可靠的双向通信。它们确保数据的顺序与发送时的顺序相同。**数据报套接字**是无连接的,并在设备之间提供不可靠的单向通信。它们不确保接收数据的顺序与发送的顺序相同。

什么是套接字编程?

Socket 编程是一种用于在网络上建立两个应用程序之间通信的技术。它涉及到创建一个套接字,这本质上是一个可以通过网络发送和接收数据的软件端点。这两个应用程序通过各自的套接字发送数据进行通信,这些套接字通过网络连接。

C# Socket 编程基础

在深入研究 C# Socket 编程的具体细节之前,了解一些通用的 Socket 编程基本概念非常重要。套接字是一种软件端点,它代表了两个基于网络的程序之间双向通信通道的一端。一个套接字由一个 **IP 地址**和一个**端口号**定义,这两个值唯一地标识了该套接字。

在 C# 中,Socket 类提供了一种创建和操作套接字的方法。Socket 类是 **System.Net.Sockets** 命名空间的一部分,它提供了一组方法和属性,使您能够通过网络创建、配置、连接、发送和接收数据。

要在 C# 中使用套接字,您必须首先导入 **System.Net.Sockets** 命名空间。**Socket** 类用于创建和操作套接字。

以下代码演示了如何在 C# 中创建一个新的套接字

**AddressFamily** 参数指定了套接字使用的寻址方案。套接字的类型由 **SocketType** 参数表示。**ProtocolType** 参数描述了套接字使用的协议。

我们使用 **Connect()** 方法来建立两个设备之间的连接。以下代码展示了如何使用 C# Socket 编程连接到远程设备

**IPAddress** 参数指定远程设备的 **IP 地址**。**IPEndPoint** 参数指定远程设备的端点。

要通过套接字发送数据,使用 **Send()** 方法。以下代码展示了如何使用 C# Socket 编程通过套接字发送数据

**byte[]** 参数指定要发送的数据。**Encoding.ASCII.GetBytes()** 方法用于将字符串 "Hello World" 转换为字节数组。

要通过套接字接收数据,使用 **Receive()** 方法。以下代码展示了如何使用 C# Socket 编程通过套接字接收数据

**byte[]** 参数指定接收数据的缓冲区。int 参数指定要接收的最大字节数。**Encoding.ASCII.GetString()** 方法用于将字节数组转换为字符串。

要关闭连接,使用 **Close()** 方法。以下代码展示了如何使用 C# Socket 编程关闭连接

C# Socket 编程示例

C# 代码

在此示例中,服务器在端口 **1234** 上监听传入连接,客户端连接到服务器的回环地址 (localhost) 和端口 1234。连接建立后,客户端向服务器发送信息,服务器以一条消息作为响应。最后,客户端和服务器都关闭它们的套接字。