Короче, мне нужно осуществить сабж от сервака(асм) к клиенту(делфи). Может подскачете как??? Я пробовал сделать, сервер все нормально отсылает, а вот как нормально принять не знаю, т.к. если пересылается какой-нить ехе-файл, то отображаются как первые 3-5 байтов. Принимаю по OnRead при помощи Socket.ReceiveText Подскажите, а то срочно надо!!!!
А чем по-твоему текст отличается от исполняемого файла или любого массива байт? Думаю уже сам догадался, что нужно использовать другой метод...
хм а че вы паритесь ? я непойму ... просто принимайте данные и делайте (собирайте (если не поток)) из них нужные вам файлы
TermoSINteZ прав. TCP сокеты (ф-я recv в данном случае) работают не со строками, а сбуфером памяти. И все равно, что там. Как я понял, у тебя делфи работает со СТРОКАМИ. Используй API.
Всем спасибо, уже сделал, кстати при помощи ReceiveBuf Теперь, надо на оборот сделать... Как лучше асмом принимать??? Точнее как все организовать, расскажите на словах кто делал.
Пусть от (К)лиента (С)ерверу: (к) -запрос на передачу с информацией о размере. например 123=1024 парсируем, переводим в число. 123 - тип команды (передача бинарника) 1024 - размер (С) отвечает что клиент может передавать файл, а сам читает 1024 байт, в случае чего - ошибка.
на www.delphiworld.narod.ru есть исходники, даже очень полезные, которые в два счета на асм переписуются. сорри за оффтоп
Слушайте, тут еще трабла. Посылаю размер, потом само содержание файла. А вот размер то он в виде строки, а мне надо число. slv ты вроде писал об этом, может есть код или подскажи, как делать... Нужно для сервака, а он на асме.
Взято с A&O: s2i PROC uses ecx ebx esi _strWORD ; in - string ; out - eax - integer LOCAL _ddWORD xor eax,eax mov _dd,eax cld xor eax,eax mov ecx,1024 mov edi,_str repne scasb mov eax,1023 sub eax,ecx ; invoke lstrlen,edi mov ecx,eax xor ebx,ebx inc ebx dec edi LS0: dec edi movzx eax,byte ptr [edi] and al,0fh mul ebx add _dd,eax imul ebx,ebx,10 loop LS0 mov eax,_dd ret s2i endp use invoke s2i,addr prm2 mov How2Rcv,eax