Socket и метод Receive

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by need_million, 11 Aug 2010.

  1. need_million

    need_million Member

    Joined:
    29 Apr 2010
    Messages:
    158
    Likes Received:
    6
    Reputations:
    0
    У меня тут лажа я использую Socket и метод Receive

    но он у меня почему иногда зависает.

    на строке recv = s.Receive(buffer);

    просто заходит туда и все дальше не идет, и только через не понятное количество времени начинает работать дальше или вылетает.


    Code:
    int recv = 0;
                    byte[] buffer = new byte[1024];
                    recv = s.Receive(buffer);
    
                    while (recv > 0)
                    {
                        logi += Encoding.UTF8.GetString(buffer, 0, recv);
                        recv = s.Receive(buffer);
                    }
     
  2. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Это асинхронный метод, он ждет когда придут данные. Возможно отсюда ноги и растут
     
  3. CodeSender:)

    CodeSender:) Elder - Старейшина

    Joined:
    29 Jul 2010
    Messages:
    245
    Likes Received:
    115
    Reputations:
    23
    Рули в этом направлении.
     
  4. need_million

    need_million Member

    Joined:
    29 Apr 2010
    Messages:
    158
    Likes Received:
    6
    Reputations:
    0
    Не опасный способ?

     
  5. CodeSender:)

    CodeSender:) Elder - Старейшина

    Joined:
    29 Jul 2010
    Messages:
    245
    Likes Received:
    115
    Reputations:
    23
    Что ты "этим" пытаешься сделать?Я честно не понял:(
     
  6. need_million

    need_million Member

    Joined:
    29 Apr 2010
    Messages:
    158
    Likes Received:
    6
    Reputations:
    0
    я достаю в начале ответ Заголовки, ищу в них размер, и потом создаю массив байт с этим размером.
     
  7. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    не всегда размер посылается.
     
    _________________________
  8. need_million

    need_million Member

    Joined:
    29 Apr 2010
    Messages:
    158
    Likes Received:
    6
    Reputations:
    0
    ага значит или берем размер, или если нет размера циклом?


    попробовал я циклом, кажется тоже зависает.

    а сейчас произошла ещё одна лажа, я достал размер, но не страница не вернулась, но метод прошел.
     
    #8 need_million, 12 Aug 2010
    Last edited: 12 Aug 2010
  9. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Попробуй поочереди, сначала читать данные, а потом тут эе отсылать подтверждение какое-нибудь.
     
  10. need_million

    need_million Member

    Joined:
    29 Apr 2010
    Messages:
    158
    Likes Received:
    6
    Reputations:
    0
    не понял
     
  11. CodeSender:)

    CodeSender:) Elder - Старейшина

    Joined:
    29 Jul 2010
    Messages:
    245
    Likes Received:
    115
    Reputations:
    23
    Апну тему, такая же трабла как и у ТС.При:

    виснет на recv = s.Receive(buffer); (при втором проходе по циклу).Вроде все варианты попробовал...

    P.S И да, виснет он вроде в самом конце, когда страница уже полностью дочитана.Также хотел бы узнать, подоздёт ли такой вариант:
     
    #11 CodeSender:), 7 Nov 2010
    Last edited: 7 Nov 2010
  12. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Ты закачиваешь странницу из инета по протоколу HTTP? Если да, то в отправляемых тобой заголовках должно присутствовать поле
    Code:
    Connection: close
     
    2 people like this.
  13. CodeSender:)

    CodeSender:) Elder - Старейшина

    Joined:
    29 Jul 2010
    Messages:
    245
    Likes Received:
    115
    Reputations:
    23
    Помогло.Биг спс.Кста, случаем не подскажешь как теперь полученную строку decompress'нуть (GZip)?
     
    #13 CodeSender:), 7 Nov 2010
    Last edited: 7 Nov 2010
  14. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Тебе надо как-то byte[] перевести в Stream а потом воспользоваться http://msdn.microsoft.com/ru-ru/library/3z72378a.aspx

    массив байтов в Stream например так:
    PHP:
    byte[] myByte = new byte[10];
    MemoryStream theMemStream = new MemoryStream(myByte0myByte.Length);
    Или вообще не посылать
    Accept-Encoding: gzip,deflate
    но этот вариант не Ъ
     
    #14 GhostOnline, 7 Nov 2010
    Last edited: 7 Nov 2010