我已經創建了一個通過TcpClient發送SSL的包裝器。總之,連接我做了這種方式:例外en 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);
不時,我有此消息的異常:
異常:無法將數據寫入傳輸連接:連接嘗試失敗,因爲連接方在一段時間後未正確響應,或者由於連接的主機未響應而導致建立的連接失敗。
內部異常:連接嘗試失敗,因爲連接的方沒有正確一段時間後響應或已建立的連接和失敗,因爲連接的主機沒有反應
的堆棧跟蹤:
at System.Net.Sockets.NetworkStream.Write(Byte [] buffer,Int32 offset,Int32 size) at System.Net.Security._SslStream.StartWriting(Byte [] buffer,Int32 offset,Int32 count,AsyncProtocolRequest asyncRequest)在System.Net.Security上的 .SslStream.ProcessWrite(Byte []緩衝區,Int32偏移量,Int32計數,AsyncProtocolRequest asyncRequest) at System.Net.Security.SslStream.Write(Byte [] buffer,Int32 offset,Int32 count) at MyCompany.Net.IGTcpClient。發送(字符串消息)
我發送好幾條消息,然後隨機,我有這個例外。現在,當我收到此異常時,我關閉連接並再次打開。我可以從另一段時間發送消息,直到異常再次提升。
當我關閉連接,我做的:
if (_stream != null)
{
_stream.Close();
}
if (_tcpClient != null)
{
_tcpClient.Close();
}
我不知道的原因。有關這個例外的原因的任何想法?
在此先感謝
異常的原因是_in_例外:_「連接嘗試失敗,因爲連接方在一段時間後沒有正確響應,或者由於連接的主機未能響應而建立的連接失敗」_。確保端口可以訪問並且套接字正在監聽。 – CodeCaster
是的,端口可以訪問,並且套接字正在監聽。實際上,我發送了幾封郵件,然後隨機發送,我有這個例外。現在,我關閉連接並再次打開。 – J19
你在使用什麼環境?多少個核心?操作系統版本/版本? IIS/IIS Express?我注意到你沒有關閉你的流,並且在某些配置中你可能只有3個併發流的限制。 – Aron