C# SSL连接异常

C# SSL连接异常,c#,.net,ssl,tcpclient,C#,.net,Ssl,Tcpclient,我已经在TcpClient上创建了一个用于发送SSL的包装器。总之,对于连接,我是这样做的: Stream _stream = null; TcpClient _tcpClient = new TcpClient(IPAddress.ToString(), Port); if (isSsl) { SslStream sslStream = new SslStream(_tcpClient.GetStream(), false, new RemoteCertificateValidat

我已经在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);      
我不时会对这条消息有一个例外:

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

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

和堆栈跟踪:

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

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

当我关闭连接时,我会:

if (_stream != null)
{
    _stream.Close();
}
if (_tcpClient != null)
{
    _tcpClient.Close();
}
我不知道原因。你知道这个例外的原因吗


提前感谢

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


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

异常的原因是:“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应”。确保端口可访问且套接字正在侦听。是的,端口可访问且套接字正在侦听。事实上,我发送了好几条消息,而且是随机的,我有这个例外。现在,我关闭连接并再次打开。您使用的是什么环境?有多少核?操作系统版本/版本?IIS/IIS Express?我注意到您没有关闭流,在某些配置中,您可能只有3个并发流。谢谢Aron。当我关闭连接时,我会关闭流,然后再关闭TcpClient连接。我使用的是.NET4。Windows8Pro和服务器是一个Java应用程序。我更新了主要帖子来反映这个问题。非常感谢。