Windows UWP StreamSocket重新启动

时间:2016-07-21 13:32:01

标签: c# .net sockets uwp chromecast

嘿,我的Windows 10 UWP API存在问题。

我正在开发Windows 10 UWP应用,需要连接到Chromecast。我正在使用SharpCaster。但是,当我打开与Chromecast的连接并稍后再次关闭时,无法再次连接到Chromecast。 Chromecast的套接字再次打开,但在尝试写入时,我收到以下异常:

A method was called at an unexpected time. (Exception from HRESULT: 0x8000000E)

当我在断开连接时关闭Chromecast时,甚至会发生这种情况。我使用此方法断开了Chromecast的连接:

public void Disconnect()
{
    _running = false;
    _socket.InputStream.Dispose();
    _socket.OutputStream.Dispose();
    _socket.Dispose();
}

这个方法在图书馆找不到,我自己写了。将_running设置为false会停止所有用于ping的循环等等...

使用以下代码创建套接字:

_socket = new StreamSocket().ConfigureForChromecast();
await _socket.ConnectAsync(new HostName(uri.Host), ChromecastPort, SocketProtectionLevel.Tls10);

扩展程序ConfigureForChromecast()如下所示:

public static StreamSocket ConfigureForChromecast(this StreamSocket socket)
{
    //Chromecast is not using trusted certificate so ignoring errors caused by that
    socket.Control.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted);
    socket.Control.IgnorableServerCertificateErrors.Add(ChainValidationResult.InvalidName);
    socket.Control.OutboundBufferSizeInBytes = 2048;

    socket.Control.KeepAlive = true;
    socket.Control.QualityOfService = SocketQualityOfService.LowLatency;
    return socket;
}

最后,使用

将消息写入套接字
internal async Task Write(byte[] bytes)
{
    try
    {
        var buffer = CryptographicBuffer.CreateFromByteArray(bytes);
        await _socket.OutputStream.WriteAsync(buffer);
    }
    catch (Exception e)
    {
        Debugger.Break();
    }

}

这就是异常发生的地方。第一次连接时,它可以正常工作,但是第二次连接时,我必须重新启动整个应用程序。有什么想法吗?

0 个答案:

没有答案