C#基于Socket套接字的网络通信封装
本文将介绍如何使用C#基于Socket套接字的网络通信封装进行网络编程,包括创建Socket、连接服务器、传输数据等操作。
创建Socket
在C#中,使用Socket
类来创建Socket。其中SocketType
指定了Socket的类型(Stream
、Dgram
、Raw
等),ProtocolType
指定了使用的协议(TCP
、UDP
等)。
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
AddressFamily.InterNetwork
表示IP v4地址族,即IPv4;SocketType.Stream
表示流类型,即面向连接的socket,需要使用TCP协议。如果使用UDP协议,需要将ProtocolType
参数设置为SocketType.Dgram
。
连接服务器
使用Connect
方法连接目标服务器。要连接远程服务器,需要指定服务器的IP地址和端口号。
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint endPoint = new IPEndPoint(ip, 5000);
socket.Connect(endPoint);
其中IPAddress.Parse("127.0.0.1")
指定了服务器的IP地址,该地址为本地主机地址(即localhost)。IPEndPoint
结构体指定了服务器的IP地址和端口号。
发送数据
使用Send
方法可以向服务器发送数据。SendMessage
为自定义方法,用于将字符串转换为字节数组并发送至服务器。
string message = "Hello, Server";
byte[] data = Encoding.ASCII.GetBytes(message);
int sentLength = socket.Send(data);
接收数据
使用Receive
方法可以从服务器接收数据。ReceiveMessage
为自定义方法,用于接收数据并将字节数组转换为字符串。
byte[] buffer = new byte[1024];
int receivedLength = socket.Receive(buffer);
string message = Encoding.ASCII.GetString(buffer, 0, receivedLength);
Console.WriteLine($"Received message: {message}");
示例说明
以下是两个示例,分别为服务器端和客户端的代码。
服务器端示例
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace SocketServer
{
class Program
{
static void Main(string[] args)
{
try
{
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint endPoint = new IPEndPoint(ip, 5000);
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(endPoint);
listener.Listen(10);
Console.WriteLine("Server started...");
while (true)
{
Socket socket = listener.Accept();
Console.WriteLine($"New client connected: {socket.RemoteEndPoint}");
byte[] buffer = new byte[1024];
int receivedLength = socket.Receive(buffer);
string message = Encoding.ASCII.GetString(buffer, 0, receivedLength);
Console.WriteLine($"Received message from client {socket.RemoteEndPoint}: {message}");
message = $"Server received your message '{message}'";
byte[] data = Encoding.ASCII.GetBytes(message);
int sentLength = socket.Send(data);
Console.WriteLine($"Sent message to client {socket.RemoteEndPoint}: {message}");
socket.Shutdown(SocketShutdown.Both);
socket.Close();
Console.WriteLine($"Client disconnected: {socket.RemoteEndPoint}");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
客户端示例
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace SocketClient
{
class Program
{
static void Main(string[] args)
{
try
{
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint endPoint = new IPEndPoint(ip, 5000);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(endPoint);
string message = "Hello, Server";
byte[] data = Encoding.ASCII.GetBytes(message);
int sentLength = socket.Send(data);
Console.WriteLine($"Sent message to server: {message}");
byte[] buffer = new byte[1024];
int receivedLength = socket.Receive(buffer);
message = Encoding.ASCII.GetString(buffer, 0, receivedLength);
Console.WriteLine($"Received message from server: {message}");
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
以上为基于Socket套接字的网络通信封装的完整攻略和示例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#基于Socket套接字的网络通信封装 - Python技术站