C# SSL连接异常
我已经在TcpClient上创建了一个用于发送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
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应用程序。我更新了主要帖子来反映这个问题。非常感谢。