человек, ты жжжеш. переименуй файл и будет будет отлично )) А если ты хочешь чтобы был текстовый формат, то просто побайтно перегони в HEX или целеком в base64 Ты бы еще спросил как из перегнать txt в avi
Смотря что перегонять: К примеру из строки: Code: StrToInt64('100') А вот мой вопросик: Отправляю GET запрос через сокет на http://testhtl.ucoz.ru/ получаю нормальный ответ отправляю на: http://testhtl.ucoz.ru/mchat/ получаю: Code: HTTP/1.1 200 OK Server: uServ/1.1.0 Date: Fri, 21 Aug 2009 18:10:35 GMT Content-Type: text/html; charset=UTF-8 Last-Modified: Fri, 21 Aug 2009 18:05:59 GMT Transfer-Encoding: chunked Connection: keep-alive Keep-Alive: timeout=15 Cache-Control: no-cache Pragma: no-cache Content-Encoding: gzip a ‹ как получить нормальный ответ? (С HTML кодом)
DiSi Code: program PicToTxt; uses SysUtils; var picture1: file of char; picture2:textfile; txt_file:textfile; i:integer; chr:char; hex_chr:string[2]; buff:widestring; {functions} function ChrToHex(S: Char): String; begin Result:= IntToHex(ord(S),2); end; function HexToChr(H: String): Char; begin Result:= Char(StrToInt('$'+Copy(H,1,2))); end; {program start} begin {convert pic->txt} buff:=''; assignfile(picture1,'c:\avata.gif'); reset(picture1); for i:=1 to filesize(picture1) do begin read(picture1,chr); buff:=buff+ChrToHex(chr); end; closefile(picture1); assignfile(txt_file,'c:\txt_file.txt'); rewrite(txt_file); write(txt_file,buff); closefile(txt_file); {convert txt->pic} buff:=''; assignfile(txt_file,'c:\txt_file.txt'); reset(txt_file); while not EOF(txt_file) do begin read(txt_file,hex_chr); chr:=HexToChr(hex_chr); buff:=buff+chr; end; closefile(txt_file); assignfile(picture2,'c:\avata2.gif'); rewrite(picture2); write(picture2,buff); closefile(picture2); end. код подходит для обработки небольших файлов(не только картинок), для б0льших - вместо widestring (в качестве буффера) надо будет, конечно, использовать что-нибудь по-серьёзнее
ErrorNeo, СПС!!!!))) помог) ы) PHP: write(pic2,hex_chr); тут ошибка( Incompatible types: 'Char' and 'String' ето когда переделует картинку в тхт((
НTL, надо делать в отдельном потоке всё!)) Если ты на сокетах делаешь, без всяких индей и прочей хрени, то в главном потоке всё делать это махохизм) Вот можешь поизучать исходнички http sender (slesh'a), сам на его основе строю запросы. http://slil.ru/27918620
НTL, у тебя зависает на функции "recv"? если да, то: Code: const GP_TIMEOUT=10000; //это значит таймаут ожидания ответа 10 секунд + Code: function recvdata(sock:TSocket):string; var tv : timeval; fds : TFDSet; buf : array [1..20000] of char; res : string; r : integer; i:integer; inc,tmp:integer; begin r:=1; while (r>0) do begin FD_ZERO(fds); FD_SET(sock, fds); tv.tv_sec := GP_TIMEOUT div 1000; tv.tv_usec := (GP_TIMEOUT mod 1000) * 1000; i := select(0, @fds, nil, nil, @tv); if (i <= 0) then begin break; end; r := recv(sock, buf, 20000, 0); res:=res+copy(buf,1,r); end; result:=res; end; ну и теперь просто вместо, к примеру, recv(s,sBuff,5000,0); юзаешь reply:=recvdata(s); где s:TSOCKET; эта функция Code: uses Windows
2 ErrorNeo короче будет если задать таймаут самому сокету типа timeout.tv_usec = 0; timeout.tv_sec = RECV_TIMEOUT; setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(TIMEVAL)); тогда recv будет автоматом вылетать через RECV_TIMEOUT милесекунд. т.е. чтобы был таймаут 10 сек нужно RECV_TIMEOUT = 10000; А потом когда это уже не нужно можно снять таймаут setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, 0, 0);
уже 2 дня пытаюсь получить HTML код от http://testhtl.ucoz.ru/mchat/ Вот код: Code: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Winsock; type TForm1 = class(TForm) Button1: TButton; Memo2: TMemo; Label2: TLabel; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var IP: string; Form1: TForm1; implementation {$R *.dfm} function HostToIP(Name: string; var Ip: string): Boolean; var wsdata : TWSAData; hostName : array [0..255] of char; hostEnt : PHostEnt; addr : PChar; begin WSAStartup ($0101, wsdata); try gethostname (hostName, sizeof (hostName)); StrPCopy(hostName, Name); hostEnt := gethostbyname (hostName); if Assigned (hostEnt) then if Assigned (hostEnt^.h_addr_list) then begin addr := hostEnt^.h_addr_list^; if Assigned (addr) then begin IP := Format ('%d.%d.%d.%d', [byte (addr [0]),byte (addr [1]), byte (addr [2]), byte (addr [3])]); Result := True; end else Result := False; end else Result := False else begin Result := False; end; finally WSACleanup; end end; procedure TForm1.Button1Click(Sender: TObject); var s:TSocket; Ws:TWSAData; addr:sockaddr_in; se, START_TEXT, STOP_TEXT:string; login:string; buf: array[0..123123] of Char; buf2: array[0..123123] of Char; sss, zhtml :string; Shtml :Integer; begin HostToIp(form1.Edit1.Text, IP); WSAStartup($101,Ws); s:=socket(af_inet, SOCK_STREAM, 0); addr.sin_family:=af_inet; addr.sin_port:=htons(80); addr.sin_addr.S_addr:=inet_addr(pchar(ip)); connect(s,addr,sizeof(addr)); se:='GET /mchat/ HTTP/1.1'#13#10+ 'Host: '+form1.Edit1.Text+#13#10+ 'User-Agent: Mozilla/5.0 (Windows; ; Windows NT 5.1; rv:1.9.1.2) Gecko/20090729 YB/4.2.0.c'#13#10+ 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'#13#10+ 'Accept-Language: ru'#13#10+ 'Accept-Encoding: deflate'#13#10+ 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'#13#10+ 'Keep-Alive: 300'#13#10+ 'Connection: Keep-Alive' + #13#10+#13#10; CopyMemory(@buf, PChar(se), Length(se)); send(s,buf,SizeOf(buf),0); recv(s,buf2,SizeOf(buf2),0); Memo2.Lines.Text:=buf2; closesocket(s); end; end. HTML приходит через раз, и если приходит то не весть код а тока часть... //Help...
В http://slil.ru/27918620 (http sender (slesh'a)) Code: procedure TForm1.Button8Click(Sender: TObject); var thId:cardinal; begin CreateThread(0,0,@Getdata,nil,0,thid); { Мой код, который надо выполнять после получения ответа } end; Как мне выполнить свой код, после получение ответа?
Что мешает сравнить строки куда пришел ответ (к примеру если первая строка(куда принимался ответ) пуста то значит нету ответа и ничего делать не надо)