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技术站