C#之Socket操作类实例解析
什么是Socket
Socket,即套接字,是通信的基础,它包含了Ip地址和端口号,可以实现进程之间的通信。
C#中的Socket类
在C#中,我们可以使用System.Net.Sockets
命名空间下的Socket
类来进行Socket编程。
Socket类的初始化
在C#中,我们可以通过以下方法创建一个Socket对象:
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
AddressFamily
:指定IP地址的协议族,常用的有InterNetwork
、InterNetworkV6
和Unix
。SocketType
:Socket的类型,常用的有Stream
和Dgram
。ProtocolType
:指定Socket使用的协议类型,常用的有Tcp
、Udp
和Icmp
等。
创建Socket对象后,我们还需要绑定一个IP地址和端口号,可以使用以下方法:
IPAddress ipAddress = IPAddress.Parse("192.168.1.100");
int port = 8888;
socket.Bind(new IPEndPoint(ipAddress, port));
Socket连接
当Socket对象初始化完成后,我们需要使用Connect
方法向目标IP地址和端口号发起连接请求,如下:
IPAddress serverIp = IPAddress.Parse("192.168.1.200");
int serverPort = 8888;
socket.Connect(new IPEndPoint(serverIp, serverPort));
Socket发送数据
当Socket连接建立成功后,我们可以使用Send
方法向连接的对象发送数据:
byte[] data = Encoding.UTF8.GetBytes("Hello, World!");
socket.Send(data);
Socket接收数据
当Socket连接建立成功时,我们可以使用Receive
方法获取数据:
byte[] data = new byte[1024 * 1024];
int length = socket.Receive(data);
string message = Encoding.UTF8.GetString(data, 0, length);
Console.WriteLine(message);
示例1:使用Socket类进行TCP通信
下面的示例演示了如何使用Socket类进行TCP通信:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace SocketTest
{
class Program
{
static void Main(string[] args)
{
try
{
// 初始化Socket
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 绑定IP地址和端口号
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
int port = 8080;
socket.Bind(new IPEndPoint(ipAddress, port));
// 发起连接请求
IPAddress serverIp = IPAddress.Parse("127.0.0.1");
int serverPort = 8081;
socket.Connect(new IPEndPoint(serverIp, serverPort));
// 发送数据
byte[] data = Encoding.UTF8.GetBytes("Hello, World!");
socket.Send(data);
// 接收数据
byte[] receiveData = new byte[1024];
int length = socket.Receive(receiveData);
string message = Encoding.UTF8.GetString(receiveData, 0, length);
Console.WriteLine(message);
// 关闭Socket
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
}
}
示例2:使用Socket类进行UDP通信
下面的示例演示了如何使用Socket类进行UDP通信:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace SocketTest
{
class Program
{
static void Main(string[] args)
{
try
{
// 初始化Socket
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
// 绑定IP地址和端口号
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
int port = 8080;
socket.Bind(new IPEndPoint(ipAddress, port));
// 发送数据
IPAddress serverIp = IPAddress.Parse("127.0.0.1");
int serverPort = 8081;
byte[] data = Encoding.UTF8.GetBytes("Hello, World!");
socket.SendTo(data, new IPEndPoint(serverIp, serverPort));
// 接收数据
EndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
byte[] receiveData = new byte[1024];
int length = socket.ReceiveFrom(receiveData, ref remoteEP);
string message = Encoding.UTF8.GetString(receiveData, 0, length);
Console.WriteLine(message);
// 关闭Socket
socket.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
}
}
以上就是使用C#中的Socket类实现Socket编程的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#之Socket操作类实例解析 - Python技术站