C# TCP 客户端接收不到数据时再关闭连接
时间: 2023-12-08 18:03:40 浏览: 42
在C# TCP客户端中,如果接收不到数据,可以考虑使用定时器来检测是否超时,如果超时则关闭连接。以下是一个简单的示例代码:
```csharp
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Timers;
class TCPClient
{
private TcpClient client;
private NetworkStream stream;
private Timer timer;
public TCPClient()
{
client = new TcpClient();
timer = new Timer(5000);
timer.AutoReset = false;
timer.Elapsed += OnTimeout;
}
public void Connect(string server, int port)
{
client.Connect(server, port);
stream = client.GetStream();
timer.Start();
Receive();
}
private void Receive()
{
byte[] buffer = new byte[1024];
stream.BeginRead(buffer, 0, buffer.Length, OnReceive, buffer);
}
private void OnReceive(IAsyncResult ar)
{
int bytesRead = stream.EndRead(ar);
if (bytesRead > 0)
{
byte[] buffer = (byte[])ar.AsyncState;
string message = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine("Received: {0}", message);
timer.Stop();
Receive();
}
else
{
Console.WriteLine("Connection closed by server.");
client.Close();
}
}
private void OnTimeout(object sender, ElapsedEventArgs e)
{
Console.WriteLine("Connection timed out.");
client.Close();
}
}
```
在上面的代码中,使用了一个定时器来检测是否超时。如果超时,则关闭连接。在接收到数据时,停止定时器并继续接收数据。如果接收到的数据长度为0,则表示连接已经关闭,关闭客户端连接。