在C#中,Socket类位于System.Net.Sockets命名空间中,它封装了操作系统供应的底层Socket接口,并供应了一些高等的方法和属性,使得我们可以方便地创建和利用Socket工具。Socket类有以下几个主要的属性:
AddressFamily:表示Socket利用的地址族,如InterNetwork(IPv4)、InterNetworkV6(IPv6)等。SocketType:表示Socket利用的类型,如Stream(TCP)、Dgram(UDP)等。ProtocolType:表示Socket利用的协议,如Tcp、Udp等。LocalEndPoint:表示Socket绑定确当地端点,即IP地址和端口号。RemoteEndPoint:表示Socket连接的远程端点,即IP地址和端口号。Socket类有以下几个主要的方法:Bind:将Socket绑定到一个本地端点上,这样它就可以监听来自该端点的网络要求。Listen:让Socket进入监听状态,等待来自远程端点的连接要求。Accept:接管一个来自远程端点的连接要求,并返回一个新的Socket工具,用于与该远程端点进行通信。Connect:让Socket主动发起一个连接要求,考试测验与指定的远程端点建立连接。Send:向远程端点发送数据。Receive:从远程端点吸收数据。Close:关闭Socket,并开释所有干系资源。如何利用Socket进行TCP通信?TCP通信须要有一个做事器端和一个客户端。做事器端卖力监听来自客户真个连接要求,并为每个连接要求创建一个新的Socket工具,用于与客户端进行数据交流。客户端卖力发起连接要求,并利用一个Socket工具与做事器进行数据交流。下面给出一个大略的示例,演示如何利用Socket进行TCP通信。
做事器端代码:

using System;using System.Net;using System.Net.Sockets;using System.Text;namespace TcpServer{ class Program { static void Main(string[] args) { // 创建一个TCP Socket工具 Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // 绑定到本地IP地址和端口号 IPAddress ip = IPAddress.Parse("127.0.0.1"); int port = 8888; IPEndPoint endPoint = new IPEndPoint(ip, port); server.Bind(endPoint); // 开始监听 server.Listen(10); Console.WriteLine("做事器已启动,等待客户端连接..."); // 循环接管客户端连接要求 while (true) { // 接管一个客户端连接要求,并返回一个新的Socket工具 Socket client = server.Accept(); Console.WriteLine("客户端已连接,IP地址和端口号为:{0}", client.RemoteEndPoint); // 创建一个字节数组,用于吸收和发送数据 byte[] buffer = new byte[1024]; // 吸收客户端发送的数据 int length = client.Receive(buffer); string message = Encoding.UTF8.GetString(buffer, 0, length); Console.WriteLine("吸收到客户真个数据:{0}", message); // 向客户端发送数据 message = "你好,我是做事器。"; buffer = Encoding.UTF8.GetBytes(message); client.Send(buffer); Console.WriteLine("向客户端发送数据:{0}", message); // 关闭客户端Socket client.Close(); } // 关闭做事器Socket server.Close(); }}
客户端代码:
using System;using System.Net;using System.Net.Sockets;using System.Text;namespace TcpClient{ class Program { static void Main(string[] args) { // 创建一个TCP Socket工具 Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // 连接到做事器 IPAddress ip = IPAddress.Parse("127.0.0.1"); int port = 8888; IPEndPoint endPoint = new IPEndPoint(ip, port); client.Connect(endPoint); Console.WriteLine("已连接到做事器,IP地址和端口号为:{0}", client.RemoteEndPoint); // 创建一个字节数组,用于吸收和发送数据 byte[] buffer = new byte[1024]; // 向做事器发送数据 string message = "你好,我是客户端。"; buffer = Encoding.UTF8.GetBytes(message); client.Send(buffer); Console.WriteLine("向做事器发送数据:{0}", message); // 吸收做事器发送的数据 int length = client.Receive(buffer); message = Encoding.UTF8.GetString(buffer, 0, length); Console.WriteLine("吸收到做事器的数据:{0}", message); // 关闭客户端Socket client.Close(); } }}
运行结果:
从上面的示例可以看出,利用Socket进行TCP通信的基本步骤如下:
做事器端创建一个TCP Socket工具,并绑定到一个本地端点上。做事器端调用Listen方法,开始监听来自客户真个连接要求。做事器端调用Accept方法,接管一个来自客户真个连接要求,并返回一个新的Socket工具,用于与该客户端进行通信。客户端创建一个TCP Socket工具,并调用Connect方法,考试测验与指定的做事器端点建立连接。做事器端和客户端分别利用自己的Socket工具,调用Send和Receive方法,进行数据交流。做事器端和客户端在通信结束后,调用Close方法,关闭自己的Socket工具。如何利用Socket进行UDP通信?UDP通信不须要建立连接,只须要知道对方的IP地址和端口号即可。UDP通信有一个发送方和一个吸收方。发送方卖力向指定的远程端点发送数据。吸收方卖力监听来自任意远程端点的数据。下面给出一个大略的示例,演示如何利用Socket进行UDP通信。
发送方代码:
using System;using System.Net;using System.Net.Sockets;using System.Text;namespace UdpSender{ class Program { static void Main(string[] args) { // 创建一个UDP Socket工具 Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); // 创建一个远程端点,表示吸收方的IP地址和端口号 IPAddress ip = IPAddress.Parse("127.0.0.1"); int port = 9999; IPEndPoint endPoint = new IPEndPoint(ip, port); // 创建一个字节数组,用于发送数据 byte[] buffer = new byte[1024]; // 向远程端点发送数据 string message = "你好,我是发送方。"; buffer = Encoding.UTF8.GetBytes(message); sender.SendTo(buffer, endPoint); Console.WriteLine("向远程端点发送数据:{0}", message); // 关闭发送方Socket sender.Close(); } }}
吸收方代码:
using System;using System.Net;using System.Net.Sockets;using System.Text;namespace UdpReceiver{ class Program { static void Main(string[] args) { // 创建一个UDP Socket工具 Socket receiver = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); // 绑定到本地IP地址和端口号 IPAddress ip = IPAddress.Parse("127.0.0.1"); int port = 9999; IPEndPoint endPoint = new IPEndPoint(ip, port); receiver.Bind(endPoint); // 创建一个字节数组,用于吸收数据 byte[] buffer = new byte[1024]; // 吸收来自任意远程端点的数据,并返回发送方的端点信息 EndPoint senderEndPoint = new IPEndPoint(IPAddress.Any, 0); int length = receiver.ReceiveFrom(buffer, ref senderEndPoint); string message = Encoding.UTF8.GetString(buffer, 0, length); Console.WriteLine("吸收到来自{0}的数据:{1}", senderEndPoint, message); // 关闭吸收方Socket receiver.Close(); } }}
运行结果:
吸收到来自127.0.0.1:8888的数据:你好,我是发送方。向远程端点发送数据:你好,我是吸收方。
从上面的示例可以看出,利用Socket进行UDP通信的基本步骤如下:
发送方创建一个UDP Socket工具,并指定一个远程端点,表示吸收方的IP地址和端口号。发送方调用SendTo方法,向指定的远程端点发送数据。吸收方创建一个UDP Socket工具,并绑定到一个本地端点上。吸收方调用ReceiveFrom方法,吸收来自任意远程端点的数据,并返回发送方的端点信息。发送方和吸收方在通信结束后,调用Close方法,关闭自己的Socket工具。总结 本文先容了C#中最基本和最常用的网络编程技能——Socket通信。我们理解了什么是Socket,以及如何利用Socket进行TCP和UDP通信。我们还给出了一些大略的示例代码,演示了如何利用Socket类创建和利用Socket工具。通过学习本文,我们可以节制C#中网络编程的根本知识,为进一步学习更高等的网络编程技能打下坚实的根本。
希望本文对你有所帮助。如果你有任何问题或建议,请在评论区留言。感激!