 |
|

20.02.2008, 18:00
|
|
Участник форума
Регистрация: 06.03.2007
Сообщений: 283
С нами:
10096166
Репутация:
120
|
|
dos999, ну попробуй сделать на примере античата
|
|
|

20.02.2008, 18:57
|
|
Познающий
Регистрация: 15.02.2008
Сообщений: 98
С нами:
9598011
Репутация:
50
|
|
грузи лучше не в файл, а в поток или строку, зачем лишние операции)) При гете указывай явно какая кодировка требуется; ну и на всякий может пригодится функция Utf8ToAnsi, так же оринетироваться при парсинге лучше по английским словам и тэгам
дело в том что Api-шка сохраняет в файл
Код:
function GetPart(ABegin, AEnd, Str: String): String;
var
b, c: Integer;
begin
if ABegin <> '' then
b := pos(ABegin, Str) + length(ABegin)
else
b := 1;
if AEnd <> '' then
c := pos(AEnd, Str) - b
else
c := length(Str) - b + 1;
Result := copy(Str, b , c);
end;
function ButtonClick(Sender: TObject): integer;
var
AStrings: TStringList;
function FindText: String;
var
i: Integer;
s: String;
begin
for i := 0 to AStrings.Count - 1 do
if pos('Сейчас на форуме </a>: ', AStrings[i]) > 0 then
begin
s := AStrings[i];
Result := GetPart('Сейчас на форуме </a>: ', ' (', s);
end;
end;
begin
AStrings := TStringList.Create;
Result := 0;
try
URLDownloadToFile(nil, 'http://forum.antichat.ru/', 'temp_file.txt', 0, nil);
AStrings.LoadFromFile('temp_file.txt');
Result := StrToInt(FindText);
DeleteFile('temp_file.txt');
finally
AStrings.Free;
end;
end;
что то вроде этого
PS. второй пост на форуме, строго не судите 
|
|
|

21.02.2008, 01:26
|
|
Участник форума
Регистрация: 23.04.2007
Сообщений: 233
С нами:
10026761
Репутация:
91
|
|
Доброго времени суток .
Интересует следующее :
Многопоточность в Delphi в частности ICS .(если можно, пример использования)
И как узнать свой айпи . (т.е. какой айпи привязан к активному интерфейсу ?)
Спасибо
|
|
|

21.02.2008, 13:38
|
|
Новичок
Регистрация: 11.02.2008
Сообщений: 7
С нами:
9603528
Репутация:
1
|
|
2Xszz про определение ip-адресов интерфейсов: _http://www.delphimaster.ru/cgi-bin/forum.pl?id=1199825920&n=4
|
|
|

21.02.2008, 16:09
|
|
Новичок
Регистрация: 11.02.2008
Сообщений: 7
С нами:
9603528
Репутация:
1
|
|
вопрос по сокетам(winsock 1, 2) . Передачу данных никогда делать не пробовал. пользовался компонентами. решил попробовать и нифига не получаеться. конект есть, а данные или не передаются или не принимаются.
код сервера:
Код:
const
port = 256;
fname = 'c:\BUF.txt';
var
WSAData:TWSAData;
sock:TSocket;
SAddr:TSockAddr;
size_sa:integer;
buf:array[1..255] of char;
f:text;
begin
assign(f,fname);
rewrite(f);
if WSAStartup($202,WSAData)<>0 then
begin
writeln('startup error...');
exit;
end;
SAddr.sin_family:=AF_INET;
SAddr.sin_port:=htons(port);
sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if sock = INVALID_SOCKET then
begin
writeln('socket error...');
exit;
end;
if bind(sock,@SAddr,sizeof(SAddr))<>0 then
begin
writeln('bind error...');
exit;
end;
size_sa:=sizeof(SAddr);
listen(sock,1);
accept(sock,@SAddr,@size_sa);
recv(sock,buf,sizeof(buf),0);
append(f);
writeln(f,buf);
closesocket(sock);
close(f);
WSACleanup;
writeln('press any key to exit...');
end.
Код клиента:
Код:
port = 256;
ip = '192.168.10.33';
var
WSAData:TWSAData;
sock:TSocket;
SAddr:TSockAddr;
i,size_sa:integer;
buf:array[1..255] of char;
begin
if WSAStartup($202,WSAData)<>0 then
begin
writeln('startup error...');
exit;
end;
SAddr.sin_family:=AF_INET;
SAddr.sin_addr.S_addr:=inet_addr(pchar(ip));
SAddr.sin_port:=htons(port);
sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if sock = INVALID_SOCKET then
begin
writeln('socket error...');
exit;
end;
size_sa:=sizeof(SAddr);
if connect(sock,@SAddr,size_sa)<>0 then
begin
writeln('error connect...');
exit;
end;
for i:=1 to 26 do
buf[i]:=char((ord('a')-1)+i);
send(sock,buf,sizeof(buf),0);
writeln(buf);
closesocket(sock);
WSACleanup;
writeln('press any key for exit...');
end.
|
|
|

22.02.2008, 01:15
|
|
Участник форума
Регистрация: 23.04.2007
Сообщений: 233
С нами:
10026761
Репутация:
91
|
|
как разбить строку вида 192.168.0.1 на 192 168 0 1 .
И как отсекать только последнюю часть ? т.е. (1) ? Чтоб в результате получать
192.168.0.
Спасибо .
|
|
|

22.02.2008, 01:50
|
|
Новичок
Регистрация: 20.02.2008
Сообщений: 1
С нами:
9591314
Репутация:
0
|
|
Как проверить склеен ли файл джойнером ?
|
|
|

22.02.2008, 03:50
|
|
Познающий
Регистрация: 31.08.2007
Сообщений: 94
С нами:
9839462
Репутация:
200
|
|
Сообщение от Xszz
как разбить строку вида 192.168.0.1 на 192 168 0 1 .
И как отсекать только последнюю часть ? т.е. (1) ? Чтоб в результате получать
192.168.0.
Спасибо .
Если конечно ты подразумевал работу со строками, то вот:
Код:
//удаляет все точки из строчки (рифма=))
function DelPoints(st:string):string;
var
i:integer;
begin
for i:=1 to length(st) do
if st[i]='.' then
st[i]:=' ';
result:=st;
end;
//удаление последнего числа после точки
function DelEnd(st:string):string;
var
i:integer;
begin
for i:=length(st) downto 1 do
if st[i]='.' then begin
result:=copy(st,1,i);//В данном случае точка в конце остается как ты и просил,
// ну а так result:=copy(st,1,i-1);её не будет
break;
end;
end;
//пример использования
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
s:=Edit1.Text;
Edit2.Text:=DelPoints(s);
Edit3.Text:=DelEnd(s);
end;
|
|
|

22.02.2008, 04:01
|
|
Познающий
Регистрация: 31.08.2007
Сообщений: 94
С нами:
9839462
Репутация:
200
|
|
Сообщение от vipadmin
Как проверить склеен ли файл джойнером ?
Ты что хочешь программу написать, которая бы это определяла? Если да то тебе нужно научиться работать с заголовками PE файлов, поскольку по EP(entry point) можно определить откуда начинается запуск файла. Дак вот если файл-результат работы склейщика, то запускается сначала движок джойнера (стаб). Поэтому если хошь сделать своего рода детектор, то нужно вести базу сигнатур (т.е известные стабы). Конечно нужно учитывать, что файл может быть еще и закриптованным!
А если просто хочешь визуально определить, то самый простой способ: берешь любой редоктор exe файлов, загружаешь и смотришь секции. Если новичок в этом можешь начать сResourceHacker...
|
|
|

22.02.2008, 16:10
|
|
Познающий
Регистрация: 22.02.2008
Сообщений: 62
С нами:
9587964
Репутация:
52
|
|
как разбить строку вида 192.168.0.1 на 192 168 0 1
Насколько я понял ты хочешь из строки 192.168.0.1 получить 4 числа.
Код:
procedure getip(ip:string; var a,b,c,d:byte);
// ip - ip адрес в строковом формате, a,b,c,d - искомые числа
var
i:byte;
x:array[0..3]of byte;
begin
for i:=0 to 3 do begin
x[i]:=0;
while (ip<>'') and (ip[1]<>'.') do
begin
x[i]:=x[i]*10+strtoint(ip[1]);
delete(ip,1,1);
end;
if (ip<>'') and (ip[1]='.') then
delete(ip,1,1);
end;
a:=x[0];
b:=x[1];
c:=x[2];
d:=x[3];
end;
|
|
|
|
 |
|
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|