Socet.resive

Тема в разделе ".NET", создана пользователем Real-Mulik, 28 фев 2007.

Статус темы:
Закрыта.
  1. Real-Mulik

    Real-Mulik Гость

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

    Real-Mulik Гость

    Нашел решение сам. В
    Код (Text):
    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;
    }
     
  3. mr_ST

    mr_ST Гость

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

    Или:

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

    Real-Mulik Гость

    Всем спасибо!
     
Статус темы:
Закрыта.

Поделиться этой страницей