Не знаю как передать файл между клиентом(DELPHI-приложение) и сервером(Ассемблер-приложение),точнее не знаю как всё это реализовать. Буду несказанно благодарен за любую информацию! Как мне отослать файл с помощью Delphi?
По TCP/IP конечно В ASM открываешь сокет (определись с номером порта), ставишь на пролушивание. В дельфях есть компонента для работы с сокетами TTcpClient... Там есть метод SendBuf, в параметрах которого ставиться буфер (куда загружаешь файл) и его длина. Сервер просыпается и начинает принимать пакеты О фрагментации можешь не беспокоиться, это головная боль протокола TCP...
а почему у нас идентификатор сокета - [hAcceptS]? Код (Text): int WSAAPI send ( IN SOCKET s, IN const char FAR * buf, IN int len, IN int flags ); 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. Может быть я просто сам тормоз... Не ругйте сильно.
Надо создать помимо сокетов и подключения туда-сюда, чо-нибудь типа своего протокола или реализовать едакую поддержку команд... Наприсмер: S: #FILE MYFILE.TXT 1324b ;файла и длина R: #+OK S: ... ;здесь тело файла R: #+OK S: #FILE END ;хеппи енд R: #+OK Ну и на это все адекватно реагировать твоми Клиен/Сервер
Как мне этот файл то в буфер считать,чтоб отправить через 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...
Ничего неполучается трассирую до end; и вылетает исключение! Quantum А что мой код тоже самое делает,только исключение вылетает!
А ты сначала передавай размер файла, а потом сам файл. Пусть клиент отсчитывает сколько ему надо байтиков. И передавай через MMF
ZlovreD Зачем усложнять себе жизнь виртуальным аллоком, когда есть обкатанный MMF?! Может у вас VirtualAlloc возвращает исключение.
Спасибо всем,кто подсказал про CreateFileMapping,MapViewOfFile. Передать файл с клиента на сервер мне удалось. ganes Так и сделал.