如何解决Android 上的 Xamarin Forms:关闭 SSL-Stream 然后在底层 TCP 套接字上通信时遇到问题
场景是这样的:
我的应用程序目前包含 2 个平台:
Windows 桌面上的 Xamarin.Forms.WPF(使用 .NET 5)和 Android 上的 Xamarin Forms (10)。
网络组件位于 .Net Standard 2.1 程序集中。
该应用程序与服务器进程通信,该进程需要将打开的 TCP 连接转发到新创建的进程。这对于 TCP 套接字本身没有问题,但对于伴随的 SSL-Stream 则不可能。
因此,我们必须关闭 SSL Stream,将套接字传输到新进程并创建一个新的 SSL-Stream。
有一个明确的消息顺序:
|客户 |服务器 |
| ------ | ------ |
|连接 | |
|初始通信 (TCP) | |
| STARTTLS、身份验证等 |切换到 SSL |
|通信 (SSL)| |
|关闭 SSL| |
| |开始新进程 |
| |转接插座|
| |发送“准备好新进程”(TCP) |
|接收“准备好新进程”(TCP) | |
| STARTTLS、身份验证等 | |切换到 SSL |
|通信 (SSL)| |
该场景适用于 Windows 桌面,但不适用于 Android,我希望有人能够提供帮助。
下面是启用 SSL 通信的代码:
sslStream = new SslStream(tcpClient.GetStream(),true,new RemoteCertificateValidationCallback(ValidateServerCertificate),null);
// The server name must match the name on the server certificate.
try
{
await sslStream.AuthenticateAsClientAsync(serverName);
}
catch (Exception ex)
{
tcpClient.Close();
throw;
}
这用于关闭 SSL-Stream:
await sslStream.ShutdownAsync();
// I discovered that I have to issue a read on Windows Desktop after the Shutdown
// Otherwise I would get encrypted data in my next Read on the TCP socket
// This doesn’t work on Android. Regardless of the following Read I always get encrypted
// data in my next Read on the TCP socket
var buf = new byte[128];
var bytesRead = await sslStream.ReadAsync(buf,buf.Length);
sslStream.Close();
sslStream.dispose();
我希望我能充分解释这个问题。如果我需要解释更详细的内容,请告诉我。
在此先感谢您的帮助。
最好的问候
乌维
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。