MST
星途 面试题库

面试题:C#中Socket通信的基本流程

请描述在C#中使用Socket进行简单的TCP通信的基本步骤,包括服务器端和客户端的代码实现要点。
15.8万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

服务器端

  1. 创建Socket对象:使用System.Net.Sockets.Socket类,指定地址家族(通常为AddressFamily.InterNetwork表示IPv4)、套接字类型(SocketType.Stream用于TCP)和协议类型(ProtocolType.Tcp)。
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  1. 绑定IP地址和端口:创建IPEndPoint对象,指定服务器的IP地址和监听端口,然后调用Bind方法将Socket绑定到该端点。
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 12345);
serverSocket.Bind(endPoint);
  1. 开始监听:调用Listen方法开始监听传入的连接请求,参数为最大挂起连接数。
serverSocket.Listen(10);
  1. 接受客户端连接:使用Accept方法阻塞等待客户端连接,该方法返回一个新的Socket对象用于与客户端通信。
Socket clientSocket = serverSocket.Accept();
  1. 数据收发:使用SendReceive方法进行数据的发送和接收。发送时需将数据转换为字节数组。
// 发送数据
string message = "Hello, client!";
byte[] sendBuffer = Encoding.UTF8.GetBytes(message);
clientSocket.Send(sendBuffer);

// 接收数据
byte[] receiveBuffer = new byte[1024];
int bytesRead = clientSocket.Receive(receiveBuffer);
string receivedMessage = Encoding.UTF8.GetString(receiveBuffer, 0, bytesRead);
  1. 关闭连接:通信结束后,关闭与客户端的Socket连接以及服务器的监听Socket
clientSocket.Close();
serverSocket.Close();

客户端

  1. 创建Socket对象:同服务器端创建方式,指定相同的地址家族、套接字类型和协议类型。
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  1. 连接服务器:创建IPEndPoint对象指定服务器的IP地址和端口,调用Connect方法连接服务器。
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345);
clientSocket.Connect(endPoint);
  1. 数据收发:与服务器端类似,使用SendReceive方法进行数据的发送和接收。
// 发送数据
string message = "Hello, server!";
byte[] sendBuffer = Encoding.UTF8.GetBytes(message);
clientSocket.Send(sendBuffer);

// 接收数据
byte[] receiveBuffer = new byte[1024];
int bytesRead = clientSocket.Receive(receiveBuffer);
string receivedMessage = Encoding.UTF8.GetString(receiveBuffer, 0, bytesRead);
  1. 关闭连接:通信结束后,关闭Socket连接。
clientSocket.Close();