TCP/IP (IPv4) ソケットを作成し、着信接続をリッスンする関数がいくつかあります。
private string RunServer(string certificate)
{
string messageData = "";
X509Certificate2 cert = new X509Certificate2(@"C:\a.p12", "qwerty");
var listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 443);
listener.Start();
while (true)
{
var client = listener.AcceptTcpClient();
var sslStream = new SslStream(client.GetStream(), false);
try
{
sslStream.AuthenticateAsServer(cert,
false, SslProtocols.Tls, true);
messageData = ReadFromSslClient(sslStream, client);
}
finally
{
sslStream.Close();
client.Close();
}
}
return messageData;
}
そして、クライアントのテスト メッセージを読み取る関数。エラーが発生する場所:
private static string ReadFromSslClient(SslStream sslStream, TcpClient client)
{
byte[] buffer = new byte[2048];
var messageData = new StringBuilder();
int bytes = -1;
do
{
try{
if (client.Connected)
{
bytes = sslStream.Read(buffer, 0, 1);
messageData.Append(bytes);
}
if (messageData.ToString().IndexOf("<EOF>") != -1)
{
break;
}
}
catch(System.NotSupportedException notSupportedException)
{
}
} while (bytes != 0);
return messageData.ToString();
}
バッファにデータを読み込もうとすると、10054 エラーと client.Connected equals false が表示されます。