下面我将为您详细讲解“详解C# Socket简单例子(服务器与客户端通信)”的完整攻略。
一、C# Socket简介
Socket(套接字)是一个抽象层,它提供了一种机制,可以使独立进程间或同一进程内的两个不同套接字之间相互通信。通俗点讲,就是在IP协议上实现的传输层。
二、使用C# Socket实现服务器与客户端通信
2.1 创建服务器程序
//创建Socket对象
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定IP地址和端口号
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);
socket.Bind(endPoint);
//监听客户端连接
socket.Listen(10);
Console.WriteLine("等待客户端连接……");
//接受客户端的连接请求
Socket clientSocket = socket.Accept();
Console.WriteLine("客户端已连接");
上面的代码,首先创建了一个Socket对象,并指定了地址族(AddressFamily)、套接字类型(SocketType)和协议类型(ProtocolType)。接着通过IPEndPoint来指定IP地址和端口号,然后通过socket.Bind()方法将Socket对象和IPEndPoint绑定。之后,通过socket.Listen()方法开始监听客户端的连接请求,参数表示最大连接数。最后,通过socket.Accept()方法等待客户端的连接,并返回一个新的Socket对象作为与客户端通信的套接字。
2.2 创建客户端程序
//创建Socket对象
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//连接到服务器
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);
socket.Connect(endPoint);
Console.WriteLine("连接服务器成功");
上面的代码,首先创建了一个Socket对象,并指定了地址族(AddressFamily)、套接字类型(SocketType)和协议类型(ProtocolType)。接着通过IPEndPoint来指定服务端的IP地址和端口号,然后通过socket.Connect()方法连接到服务器。
2.3 服务器与客户端的数据传输
下面是服务器向客户端发送数据:
//服务器向客户端发送数据
byte[] sendData = Encoding.UTF8.GetBytes("Hello Client!");
clientSocket.Send(sendData, sendData.Length, SocketFlags.None);
上面的代码,通过Encoding.UTF8.GetBytes()方法将字符串转换成字节流,然后通过clientSocket.Send()方法向客户端发送数据。
下面是客户端向服务器发送数据:
//客户端向服务器发送数据
byte[] sendData = Encoding.UTF8.GetBytes("Hello Server!");
socket.Send(sendData, sendData.Length, SocketFlags.None);
上面的代码,通过Encoding.UTF8.GetBytes()方法将字符串转换成字节流,然后通过socket.Send()方法向服务器发送数据。
三、总结
以上就是使用C# Socket实现服务器与客户端通信的完整攻略。其中,服务器与客户端的通信流程可以简单概括为:创建Socket对象->指定连接地址->绑定IP和端口->监听连接请求->接受连接请求/连接到服务器->数据传输。其中,数据传输可以通过socket.Send()和Receive()方法来实现。
示例:
例如,在客户端发送消息后,服务器可以接收消息并打印出来,如下所示:
//服务器接收来自客户端的消息并打印
byte[] recvBuffer = new byte[1024];
int length = clientSocket.Receive(recvBuffer);
string msg = Encoding.UTF8.GetString(recvBuffer, 0, length);
Console.WriteLine("接收到客户端的消息:" + msg);
又例如,在服务器发送消息后,客户端可以接收消息并打印出来,如下所示:
//客户端接收来自服务器的消息并打印
byte[] recvBuffer = new byte[1024];
int length = socket.Receive(recvBuffer);
string msg = Encoding.UTF8.GetString(recvBuffer, 0, length);
Console.WriteLine("接收到服务器的消息:" + msg);
以上,就是两个简单的示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解C# Socket简单例子(服务器与客户端通信) - Python技术站