• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Socet.resive

  • Автор темы Real-Mulik
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

Real-Mulik

Есть проблема при программировании сокета. Когда по ошибке или из-за неправильной работы сервера программа зависает на функции Resive. т.е. клиент пытается получить пакет, а его на самом деле никто и не шлет, как сделать timeout? среди стандартных параметров я ничего похожего не нашел.
 
R

Real-Mulik

Нашел решение сам. В
Код:
Socket S = new Socket(IPEntry.AddressList[i].AddressFamily, SocketType.Stream, ProtocolType.Tcp);
S.Connect(IPEntry.AddressList[i], 110);
if (S.Connected)
{
Console.WriteLine("Connected!");
Soc775 = S;
Soc775.ReceiveTimeout = 100; //Устанавливаем timout
Console.WriteLine(this.recive(false));
this.send("Hello");
Console.WriteLine(this.recive(false));
Console.WriteLine(Soc775.ReceiveTimeout);
break;
}
 
M

mr_ST

проперть ReceiveTimeout Gets or sets a value that specifies the amount of time after which a synchronous Receive call will time out.

Или:

Код:
while(true)
{
if (socket.Available > 0)
{
socket.Receive(...);
// продолжаем формировать входящий пакет
}
Sleep(100);
if (слишком долго ждем формирования пакета)
сбросит пакет как ошибочный. 
}
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!