SSL连接出现异常



我已经在TcpClient上创建了一个用于发送SSL的包装器。总之,对于连接,我是这样做的:

Stream _stream = null;
TcpClient _tcpClient = new TcpClient(IPAddress.ToString(), Port);
if (isSsl)
{
SslStream sslStream = new SslStream(_tcpClient.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), new LocalCertificateSelectionCallback(SelectLocalCertificate));
if (Certificate != null)
{                             
X509CertificateCollection cc = new X509CertificateCollection ();
cc.Add (Certificate);
sslStream.AuthenticateAsClient(_Host, cc, SslProtocols.Default, false);
}
else
{
sslStream.AuthenticateAsClient(_Host);
}
sslStream.WriteTimeout = 5000;                        
_stream = (SslStream)sslStream;
}
else
{
NetworkStream networkStream = _client.GetStream();
_stream = (NetworkStream)networkStream;
}

对于发送,我做:

_stream.Write(dgram, 0, dgram.Length);      

有时,我会对这条消息有一个例外:

异常:无法将数据写入传输连接:由于连接方在一段时间后没有正确响应,连接尝试失败,或者由于连接的主机没有响应,建立的连接失败。

内部异常:由于连接方在一段时间后没有正确响应,连接尝试失败,或者由于连接的主机未能响应而建立的连接失败

StackTrace:

位于System.Net.Sockets.NetworkStream.Write(Byte[]缓冲区,Int32偏移量,Int32大小)在System.Net.Security._SslStream.StartWriting(Byte[]缓冲区,Int32偏移量,Int32计数,AsyncProtocolRequest asyncRequest)在System.Net.Security._SslStream.ProcessWrite(Byte[]缓冲区,Int32偏移量,Int32计数,AsyncProtocolRequest asyncRequest)在System.Net.Security.SslStream.Write(Byte[]缓冲区,Int32偏移量,Int32计数)在MyCompany.Net.IGTcpClient.Send(字符串消息)

我随机发送了几条消息,我有这个例外。现在,当我收到这个异常时,我会关闭连接并再次打开。我可以从另一段时间发送消息,直到再次引发异常。

当我关闭连接时,我会:

if (_stream != null)
{
_stream.Close();
}
if (_tcpClient != null)
{
_tcpClient.Close();
}

我不知道是什么原因。你知道这个例外的原因吗?

提前感谢

Aron的评论是正确的,您需要关闭这些流。套接字在关闭后会挂一段时间,可能是服务器端已经相信它与客户端有连接,而事实上它没有。使用后关闭流将确保下次"打开"良好。

UPDATE-我正在达到,但将超时值从5秒增加到10秒。

相关内容

  • 没有找到相关文章

最新更新