C# Socket接收数据如果没有数据就返回
时间: 2023-09-15 14:24:27 浏览: 151
在 C# 中,可以使用非阻塞式的 Socket 接收数据并设置超时时间,如果在规定时间内没有数据到达,则返回一个错误。以下是一个示例代码:
```csharp
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(new IPEndPoint(IPAddress.Any, 1234));
socket.Listen(10);
Socket clientSocket = socket.Accept();
clientSocket.ReceiveTimeout = 5000; // 设置接收超时时间为 5 秒
byte[] buffer = new byte[1024];
int receivedBytes = 0;
try
{
receivedBytes = clientSocket.Receive(buffer);
}
catch(SocketException ex)
{
if (ex.SocketErrorCode == SocketError.TimedOut)
{
// 超时错误处理
Console.WriteLine("接收超时!");
}
else
{
// 其他错误处理
Console.WriteLine("接收数据时发生错误:" + ex.Message);
}
}
if (receivedBytes > 0)
{
// 处理接收到的数据
Console.WriteLine("接收到的数据:" + Encoding.UTF8.GetString(buffer, 0, receivedBytes));
}
else
{
// 没有接收到数据
Console.WriteLine("没有接收到数据!");
}
clientSocket.Close();
socket.Close();
```
在上面的代码中,我们将接收超时时间设置为 5 秒。如果在这个时间内没有数据到达,就会抛出一个 SocketException 异常,并且异常的 SocketErrorCode 属性值为 SocketError.TimedOut,这样我们就可以识别出超时错误并进行处理。如果接收到数据,则可以处理接收到的数据。如果没有接收到数据,则可以根据需要执行相应的操作。
阅读全文