Сокеты

Тема в разделе "WASM.BEGINNERS", создана пользователем BreakHeart, 28 окт 2010.

  1. BreakHeart

    BreakHeart New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2009
    Сообщения:
    71
    Вот пытаюсь переписать один скрипт с руби на си, но к сожалению с руби вообще не знаком, а с сокетами очень плохо знаком...сокет монитором увидел такую вещь, что после WSASend идет сначала WSARecv который принимает 4 байта которые содержат размер принимаемого пакета а потом идет WSARecv который принимает уже сам пакет каким образом это реализуется подскуажите пожалуйста...
     
  2. BreakHeart

    BreakHeart New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2009
    Сообщения:
    71
  3. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Сформулируй свой вопрос точнее. Сейчас он похож на "что использовать, чтобы огурцы ложкой банка майонеза".
    вот тут вообще мозг взорвать можно. И расставь запятые.
     
  4. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    уходят "корнями" в NtDeviceIoControlFile из ntdll.dll
     
  5. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    RET
    И что? Ты вопрос то читал?
    Ему нет разницы что идет за WSASend/recv.

    И вообще судя по всемму у ТС проблемы еще и с алгоритмизацией и си в том числе
    Код (Text):
    1. DWORD size;
    2. char* rbuff;
    3. char* sbuf;
    4. ;initialize send buffer *sbuf=some;
    5. DWORD received;
    6. WSASend(...sbuf...);
    7. WSARecv(...&size...&received);
    8. if (received==4)
    9. {
    10.      rbuff=malloc(*size)
    11.      if (rbuff)
    12.      {
    13.          WSARecv(...rbuff...&received);
    14.          if (received==*size)
    15.          {
    16.              //packet getted
    17.          }
    18.      }
    19. }
    ?
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Да у автора вообще непонятно, с чем проблемы. Как ты там хоть что-то понял, мне вообще непонятно :)
     
  7. BreakHeart

    BreakHeart New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2009
    Сообщения:
    71
    punxer
    А разве таким образом он не примет сразу пакет?Мне ведь надо сначала получить размер буфера а потом его принять
     
  8. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    BreakHeart
    сокеты в руби такие же как и в POSIX, с небольшими косметическими изменениями. AFAIK WSARecv/WSASend -- это тот же POSIX только зачем-то переименованный. Какие могут быть возникать проблемы при переписывании кода с ruby на C -- непонятно.
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Аналогично.
     
  10. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    BreakHeart
    Все зависит от посылающей стороны..
     
  11. BreakHeart

    BreakHeart New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2009
    Сообщения:
    71
    в продолжение темы...
    С реквами я разобрался, но тут встал другой вопрос так же сокет спай показывает что используется ф-ия WSAEnumNetworksEvents но в тоже время не используется WSAWaitForMultipleEvents...Разве так может быть?и если может быть то перед WSARecv надо проверять на FD_READ или нет?
     
  12. BreakHeart

    BreakHeart New Member

    Публикаций:
    0
    Регистрация:
    17 фев 2009
    Сообщения:
    71
    Очередная проблема появилась...Делаю сенд-рид OpenPrinterEx а затем делаю рид хендла принтера, пакеты идентичные летаю тем что скрипт шлет но почему-то мне не прилетает пакет с хенделом, только ацк приходит после рида, а скрипту нормально все прилетае в чем может быть проблема?