- 我想使用长Tcp连接而不是短活动连接
- 我需要知道连接何时断开,即使拔下网络电缆时也是如此(几秒/分钟是可以接受的(
我已经尝试遵循代码
_tcpListener = new TcpListener(endPoint);
_tcpListener.Start();
_ = Task.Factory.StartNew(async () =>
{
while (true)
{
try
{
var buffer = new Memory<byte>(new byte[1024 * 10]);// 10KB buffer
var result = 0;
var client = await _tcpListener.AcceptTcpClientAsync();
using (var stream = client.GetStream())
{
result = await stream.ReadAsync(buffer);
this.HandleMessage(buffer.Slice(0, result));
}
}
catch (SocketException e)
{
NLog.LogManager.GetCurrentClassLogger().Info(e);
HandleMessage(new Memory<byte>(Encoding.UTF8.GetBytes("rtsp://shutdown$")));
}
catch (Exception e)
{
NLog.LogManager.GetCurrentClassLogger().Info(e);
}
}
}, TaskCreationOptions.LongRunning);
但它似乎不是一个长的tcp连接,因此无法检测到连接丢失。
我还尝试在GetStream()
之后进行另一个循环,但在第一次读取(结束(之后,它无法读取任何数据。
有人能帮我吗?为什么它看起来与WebSocket如此不同,即使我关闭了客户端设备,我也无法通过任何SocketException来实现它。
如果我理解得对,你需要:
-
对于长寿命Tcp连接,您可以使用
_tcpListener.Start()
而不是_tcpListener.Start(Int32)
更多信息,请点击 -
要检查您的连接是否处于活动状态,您可以使用
_tcpListener.Active
属性
true(如果TcpListener正在主动侦听(;否则为false。