我正在尝试编写一个UWP应用,该应用通过HTTPS使用MQTT与服务器通信。我使用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结果
答案 0 :(得分:0)
问题似乎与HTTPS有关。您是否尝试过使用UpgradeToSslAsync方法,如果在发送和接收一些初始数据后需要SSL / TLS连接,请使用UpgradeToSslAsync方法将连接升级为使用SSL,如下所示:>
await streamSocket.ConnectAsync(new HostName("server.com"), "443", Windows.Networking.Sockets.SocketProtectionLevel.PlainSocket);
await streamSocket.UpgradeToSslAsync(Windows.Networking.Sockets.SocketProtectionLevel.Tls12, hostName);
谢谢
艾米·彭