Передача файлов

Тема в разделе "WASM.NETWORKS", создана пользователем ZlovreD, 23 дек 2004.

Статус темы:
Закрыта.
  1. ZlovreD

    ZlovreD New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    28
    Не знаю как передать файл между клиентом(DELPHI-приложение) и сервером(Ассемблер-приложение),точнее

    не знаю как всё это реализовать.



    Буду несказанно благодарен за любую информацию!



    Как мне отослать файл с помощью Delphi?
     
  2. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    По TCP/IP конечно :) В ASM открываешь сокет (определись с номером порта), ставишь на пролушивание. В дельфях есть компонента для работы с сокетами TTcpClient... Там есть метод SendBuf, в параметрах которого ставиться буфер (куда загружаешь файл) и его длина. Сервер просыпается и начинает принимать пакеты :) О фрагментации можешь не беспокоиться, это головная боль протокола TCP...
     
  3. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    а почему у нас идентификатор сокета - [hAcceptS]?


    Код (Text):
    1. int WSAAPI
    2. send (
    3.     IN      SOCKET      s,
    4.     IN      const char FAR *    buf,
    5.     IN      int             len,
    6.     IN      int             flags
    7.  );




    s - A descriptor identifying a connected socket.

    buf - A buffer containing the data to be transmitted.

    len - The length of the data in buf.

    flags - Specifies the way in which the call is made.




    Может быть я просто сам тормоз... Не ругйте сильно.
     
  4. ganes

    ganes New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2004
    Сообщения:
    62
    Адрес:
    Ukraine
    Надо создать помимо сокетов и подключения туда-сюда,

    чо-нибудь типа своего протокола или реализовать едакую

    поддержку команд...

    Наприсмер:

    S: #FILE MYFILE.TXT 1324b ;файла и длина

    R: #+OK

    S: ... ;здесь тело файла

    R: #+OK

    S: #FILE END ;хеппи енд

    R: #+OK

    Ну и на это все адекватно реагировать твоми Клиен/Сервер
     
  5. ZlovreD

    ZlovreD New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    28
    Как мне этот файл то в буфер считать,чтоб отправить через SendBuf?



    Пробую ТАК:



    var

    filenm:string;

    filesz,hfl:integer;

    ptrmem,tmp:Pointer;



    begin

    if OpenDialog1.Execute then

    filenm:=OpenDialog1.FileName;

    hfl:=CreateFile(PChar(filenm),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EX ISTING,FILE_ATTRIBUTE_NORMAL,0);

    filesz:=Integer(GetFileSize(hfl,nil));

    ptrmem:=VirtualAlloc(nil,filesz,MEM_COMMIT,PAGE_READWRITE);

    ReadFile(hfl,ptrmem,filesz,LongWord(tmp),nil);

    CloseHandle(hfl);



    Ничего не получается... Вылетает исключение...

    Я уже запутался с множеством типов данных в DELPHI...
     
  6. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    ZlovreD



    Оптимально через MMF. Поиск по ключевым словам "CraeteFileMapping, MapViewOfFile".
     
  7. ZlovreD

    ZlovreD New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    28
    Ничего неполучается трассирую до end; и вылетает исключение!

    Quantum



    А что мой код тоже самое делает,только исключение вылетает!
     
  8. Turkish

    Turkish New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    80
    Адрес:
    Russia
    А ты сначала передавай размер файла, а потом сам файл. Пусть клиент отсчитывает сколько ему надо байтиков. И передавай через MMF
     
  9. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    ZlovreD

    Зачем усложнять себе жизнь виртуальным аллоком, когда есть обкатанный MMF?! Может у вас VirtualAlloc возвращает исключение.
     
  10. ZlovreD

    ZlovreD New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    28
    Спасибо всем,кто подсказал про CreateFileMapping,MapViewOfFile.

    Передать файл с клиента на сервер мне удалось. :)



    ganes



    Так и сделал.
     
Статус темы:
Закрыта.