我尝试遵循代码
_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。
答案 0 :(得分:0)
如果我理解的正确,那么您需要:
要使Tcp连接寿命长,您可以使用_tcpListener.Start()
代替_tcpListener.Start(Int32)
,再使用here
要检查您的连接是否有效,可以使用_tcpListener.Active
属性
如果TcpListener正在积极侦听,则为true;否则为false。否则为假。