【发布时间】:2019-06-21 19:23:55
【问题描述】:
我正在尝试编写一个通过 HTTPS 使用 MQTT 与服务器通信的 UWP 应用。我使用 StreamSocket 通过线路发送整个 MQTT 数据包,但我无法从服务器获得任何响应。如果我尝试重新发送数据包,服务器将终止连接。使用 Wireshark,我可以看到服务器响应了一条消息 Content-Type: Alert (21),其中包含 26 个字节的数据,但我无法通过 StreamSocket.InputStream 读取它
var streamSocket = new StreamSocket();
Buffer packet;
// Building Mqtt packet.
await streamSocket.ConnectAsync(new HostName("server.com"), "443", SocketProtectionLevel.Tls12);
await streamSocket.OutputStream.WriteAsync(packet);
await Task.Delay(2000); // Give the server some time to respond
var inputBytes = new byte[2048];
var completion = await streamSocket.InputStream.ReadAsync(inputBytes.AsBuffer(),(uint) inputBytes.Length, InputStreamOptions.Partial);
// inputBytes still empty
我希望能够读取服务器响应的字节数。我认为有一种方法可以访问这些字节,但我在任何地方都找不到。
更新:添加了 Wireshark 结果
【问题讨论】:
-
请查看Creating secure socket connections。 当接收到传入通信时,您不能将 SSL/TLS 与由 StreamSocketListener 创建的 StreamSocket 一起使用,因为作为服务器的 SSL/TLS 协商不是由 StreamSocket 类实现的
-
@NicoZhu-MSFT 我的错,我没有复制我的代码,所以我在这里犯了一个小错误。为了澄清我没有使用 StreamSocketListener。我只是在延时后读取了套接字。我什至将读取命令置于延迟 2 秒的无限循环中,但仍然一无所获。请查看我刚刚附上的 Wireshark 结果的屏幕截图。
标签: c# networking uwp wireshark tls1.2