На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> WebClient - как заставить не резать пакет запроса?
    Добрый вечер всем.
    Стандартное поведение многих веб клиентов (как оказалось, включая WebClient) это отправить POST запрос начиная с POST / HTTP/1.1 и заканчивая \r\n\r\n одним пакетом, а сами данные - следующим пакетом, после этого ждать ответа от сервера.

    Я работаю с микроконтроллером сторонней разработки. Оригинальный софт шлет весь запрос одним пакетом, написан на голых сокетах, потому там можно всё. В C# я ограничен только функционалом .NET, и при отправке идентичного пакета получаю в ответ error 500. Было только 2 отличия - это Connection: Keep-Alive (по умолчанию в WebClient), от него уже избавился, и разбиение запроса на 2 пакета. Предполагаю что микроконтроллер не умеет ждать второго пакета и ждет данные в первом, данные пустые потому выдает ошибку. Есть идеи как заставить WebClient слать все одним пакетом либо как отправить сырые данные в сокет на шарпах? Данных там не много, нет повода для разбивки пакета на куски, все равно больше чем MTU но "родной" софт их успешно одним пакетом отправляет.
    Сообщение отредактировано: Виталь -
      Я тебе уже отвечал на подобный вопрос в этой теме
      Даже если ты умудришься сформировать один большой пакет, на ближайшем хопе маршрутизатор разобьёт твои пакет на несколько, потому что интернеты по другому не работают. Всё. Забудь про впихнуть невпихуемое.

      Добавлено
      Хочешь помощи, сделай дамп запросатрафика оригинального софта при помощи tcpdump/wireshark, ложи сюда, будем думать.
      Сообщение отредактировано: Gonarh -
        Здесь TCP, там был UDP.

        Там вопрос касался больших размеров пакетов и ту проблему давно решил собственно передачей в половинном размере, и даже забыл за нее. Пару месяцев назад обнаруживал нечто похожее с одним софтом - когда в исходниках прописан максимальный размер буфера приема, сервер передает данные максимально утрамбованные в этот размер, а все что не влазит - передается ответом на следующий запрос, из-за того что такие пакеты терялись на некоторых направлениях пришлось тоже урезать размер пакета для отправки в исходниках сервера, благо протокол изначально позволяет слать кусками. Это все не к этой теме.

        Сохранял дамп из Microsoft Network Monitor, надо найти где лежит. Там реально идет первый пакет только шапка HTTP запроса, во втором - данные. То же самое я видел лет 15 назад когда впервые отправил HTTP запрос на низком уровне из Delphi. Но софт шлет шапку и post данные одним пакетом и это мне не показалось :)
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0187 ]   [ 16 queries used ]   [ Generated: 16.04.24, 10:03 GMT ]