Я создал обертку поверх 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);
Время от времени, у меня есть исключение с этим сообщением:
Исключение: Невозможно записать данные в транспортное соединение: попытка подключения завершилась неудачно, потому что связанная сторона не ответила должным образом через некоторое время или установив соединение не удалось, поскольку подключенный хост не смог ответить.
Внутреннее исключение: Попытка подключения не удалась, поскольку подключенная сторона не ответила после определенного периода времени, или установить соединение не удалось, так как подключенный хозяин не смог ответить
И 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 [] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslStream.Write (байт [] buffer, Int32 offset, Int32 count) в MyCompany.Net.IGTcpClient. Отправить (сообщение String)
Я отправляю несколько сообщений в порядке и случайным образом, у меня есть это исключение. Теперь, когда я получаю это исключение, я закрываю соединение и снова открываю. Я могу отправлять сообщения с другого количества времени, пока исключение не возникнет снова.
Когда я закрываю соединение, я:
if (_stream != null)
{
_stream.Close();
}
if (_tcpClient != null)
{
_tcpClient.Close();
}
Я понятия не имею, почему. Любая идея о причине этого исключения?
Заранее спасибо
Причиной исключения является _in_ исключение: _ «Не удалось выполнить попытку подключения, потому что связанная сторона не ответила должным образом через некоторое время или установив соединение не удалось, потому что подключенный хост не смог ответить« _. Убедитесь, что порт доступен и сокет прослушивает. – CodeCaster
Да, порт доступен и сокет прослушивает. На самом деле, я отправляю несколько сообщений в порядке и случайным образом, у меня есть это исключение. Теперь я закрываю соединение и снова открываю. – J19
Какую среду вы используете? Сколько ядер? Версия ОС/версия? IIS/IIS Express? Я замечаю, что вы не закрываете свои потоки, и в определенных конфигурациях у вас может быть только ограничение из трех одновременных потоков. – Aron