Как я знаю, лучшего способа сделать это не существует.Существует два способа обнаружения отключения StreamSocket:
- отправлять сообщение пульса для мониторинга, если другая сторона (сервер) закрыта.
- read 0-length означает конец потока.
Кроме того, вы можете обнаружить сетевое соединение с помощью NetworkInformation.NetworkStatusChanged . Благодаря этому приложение может узнать, является ли сеть недействительной, поскольку основная причина вызывает StreamSocket.отсоединен.Подробнее см. Реакция на изменения состояния сети .
Если вы измените хост как сервер, все ваше устройство как клиент, подключенный к вашему хосту, вы можете начать прослушивать порт tcpчерез StreamSocketListener .Событие ConnectionReceived может обнаружить входящее соединение и изменение статуса.
StreamSocketListener listener = new StreamSocketListener();
listener.ConnectionReceived += OnConnection;
private async void OnConnection(
StreamSocketListener sender,
StreamSocketListenerConnectionReceivedEventArgs args)
{
DataReader reader = new DataReader(args.Socket.InputStream);
try
{
while (true)
{
// Read first 4 bytes (length of the subsequent string).
uint sizeFieldCount = await reader.LoadAsync(sizeof(uint));
if (sizeFieldCount != sizeof(uint))
{
// The underlying socket was closed before we were able to read the whole data.
//Detect disconnection
return;
}
// Read the string.
uint stringLength = reader.ReadUInt32();
uint actualStringLength = await reader.LoadAsync(stringLength);
if (stringLength != actualStringLength)
{
// The underlying socket was closed before we were able to read the whole data.
//Detect disconnection
return;
}
//TO DO SOMETHING
}
}
catch (Exception exception)
{
//TO DO SOMETHING
}
}