下面是关于“C#之Socket(套接字)通信”的完整攻略。
一、Socket(套接字)通信简介
Socket(套接字)是网络编程中的一个概念,主要用于实现网络通信。在Socket通信中,可以使用多种协议进行通信,如TCP、UDP等。
在C#中,Socket通信主要是通过System.Net命名空间中的一些类和接口实现的。
二、Socket(套接字)通信流程
在C#中,Socket(套接字)通信的基本流程如下:
-
创建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协议。 -
连接Socket
在创建Socket对象之后,需要使用Connect方法来连接服务器:
csharp
socket.Connect(ip, port);其中,
ip
是服务器的IP地址,port
是服务器的端口号。 -
发送数据
使用Socket对象的Send方法来发送数据:
csharp
byte[] sendBytes = Encoding.ASCII.GetBytes("Hello, server!");
socket.Send(sendBytes);上面的代码中,首先将字符串转换成字节数组,然后调用Socket对象的Send方法发送数据。
-
接收数据
通过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方法接收数据,并将其转换成字符串。
-
关闭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技术站