
24.12.2009, 01:02
|
|
Познающий
Регистрация: 21.11.2009
Сообщений: 77
С нами:
8668804
Репутация:
29
|
|
Пытаюсь разобраться в winsock.
Возникла такая проблемка
есть кусок кода:
PHP код:
addr.sin_family:=AF_Inet;
addr.sin_port:=htons(80);
addr.sin_addr.S_addr:=inet_addr('127.0.0.1');
Err(Connect(S,addr,SizeOf(TSockAddr)));
этот код работает когда на одном ip один сайт,
а как быть если на одном ip не один сайт?
ведь при заходе на этот ip на сайт не попадаешь
|
|
|

24.12.2009, 15:17
|
|
Постоянный
Регистрация: 12.05.2009
Сообщений: 395
С нами:
8947056
Репутация:
229
|
|
Сообщение от TrueBit
Пытаюсь разобраться в winsock.
Возникла такая проблемка
есть кусок кода:
PHP код:
addr.sin_family:=AF_Inet;
addr.sin_port:=htons(80);
addr.sin_addr.S_addr:=inet_addr('127.0.0.1');
Err(Connect(S,addr,SizeOf(TSockAddr)));
этот код работает когда на одном ip один сайт,
а как быть если на одном ip не один сайт?
ведь при заходе на этот ip на сайт не попадаешь
Во первых, мы соед. с сервером но не с сайтом, т.е. производится функция коннекта к серверу (а именно к порту сервера)(но не к сайту), к примеру мы приконнектились и хотим чтобы сервер нам выдал содержимое определенной страницы (в html виде естественно  ), определенного сайта.
Тогда пишем так (я забежал чуть вперед чтобы было понятно):
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
sock:tsocket;
addr:sockaddr_in;
sendstring:string;
sendbuffer, recvbuffer:array [0..4095] of char;
dsize:dword;
begin
sock:=socket(af_inet, SOCK_STREAM, 0); //Указываем что хотим работать с TCP
addr.sin_family:=af_inet;
addr.sin_addr.S_addr:=inet_addr('81.177.9.119');//Ip тачки где расположен сайт gamecs.net
addr.sin_port:=htons(80);
if connect(sock, addr, sizeof(addr))=0 then //В случае если успешно подкл. к порту то...
begin
Showmessage('Соед. есть! Посылаем данные');
sendstring:='GET http://gamecs.net/forum/index.php? HTTP/1.0'+#13#10+
//Говорим мол нам нужна страница broadcast.xml
//Тут даем знать серверу какой нам нужен сайт
'User-Agent: Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.20'+#13#10+
'Host: gamecs.net'+#13#10+
'Cookie: pass_hash=aa1b56893b171c26e306a653c4074af1; session_id=6535fe43f9b89af027382d5c00ff2790; __utma=172773923.'+
'2094703955.1261652832.1261652832.1261652832.1; __utmb=142773923; __utmc=142773923; __utmz=142773923.1261652832.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)'+#13#10+
'Cookie2: $Version=1'+#13#10+
'Connection: Keep-Alive'+#13#10+#13#10;
CopyMemory(@sendbuffer, pchar(sendstring), length(sendstring));
send(sock, sendbuffer, sizeof(sendbuffer), 0);
repeat
dsize:=recv(sock, recvbuffer, 4095, 0);
memo1.lines.text:=memo1.lines.text+recvbuffer;
until (dSize = 0) or (dSize = SOCKET_ERROR);
//Принимаем полный HTML пакет
//Правда там всякая фигня в конец дописывается но лень сейчас дореализовывать этот момент
end
else
begin
Showmessage('Соед. нету!');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
ws:wsadata;
begin
WSAStartup($101, ws);
end;
Если что не понятно -> спрашивай
(у gamecs.net тоже есть соседнии сайты)
|
|
|

26.12.2009, 02:40
|
|
Познающий
Регистрация: 21.11.2009
Сообщений: 77
С нами:
8668804
Репутация:
29
|
|
Сообщение от wolmer
Во первых, мы соед. с сервером но не с сайтом, т.е. производится функция коннекта к серверу (а именно к порту сервера)(но не к сайту), к примеру мы приконнектились и хотим чтобы сервер нам выдал содержимое определенной страницы (в html виде естественно ), определенного сайта.........
Всё получилось спасибо, но как вывести в мемо код страницы, сейчас в мемо какие то иероглифы..
|
|
|

24.12.2009, 09:12
|
|
Постоянный
Регистрация: 26.01.2008
Сообщений: 796
С нами:
9626394
Репутация:
357
|
|
TrueBit, Посмотри это:
http://www.sources.ru/delphi/internet/resolve_ip_to_host.shtml
или это:
http://www.sources.ru/delphi/delphi_resolve_host_to_ip.shtml
Одно из них рабочие, а вот какое не помню...
-------------------------------------------
Как мне на Delphi сделать прогу которая бы висела в процессах (То есть без формы) и спокойно выполняла свою дела? Если создать Console Application, то будет висеть окно терменала...
ПС, пока писал пост, подумал что если в Console Application запустить поток, то может быть терминальное окно уйдет?
|
|
|

24.12.2009, 11:04
|
|
Познающий
Регистрация: 15.12.2009
Сообщений: 81
С нами:
8634231
Репутация:
24
|
|
Сообщение от НTL
Как мне на Delphi сделать прогу которая бы висела в процессах (То есть без формы) и спокойно выполняла свою дела? Если создать Console Application, то будет висеть окно терменала...
ПС, пока писал пост, подумал что если в Console Application запустить поток, то может быть терминальное окно уйдет?
На мой взгляд у тебя два выхода - либо прятать форму, либо создавать приложение без форм.
В первом случае производим такие действия с фомой:
> BorderStyle = bsNone
> Color = clSkyBlue
> TransparentColor = True
> TransparentColorValue = clSkyBlue>
>На событие OnShow пишем такой код:
Код:
ShowWindow(Application.Handle, sw_Hide);
Во втором случае:
>Создаем ConsoleApplication
>Удаляем (Стираем после program Project1) директиву {$APPTYPE CONSOLE}
|
|
|

24.12.2009, 18:37
|
|
Участник форума
Регистрация: 03.07.2009
Сообщений: 151
С нами:
8871700
Репутация:
41
|
|
Сообщение от НTL
Как мне на Delphi сделать прогу которая бы висела в процессах (То есть без формы) и спокойно выполняла свою дела? Если создать Console Application, то будет висеть окно терменала...
Собственно, как и говорил slesh. File->new->other->console application.
Удаляем строчку {$APPTYPE CONSOLE} - так не будет показываться черное окно. Далее организуем бесконечный цикл, чтобы программа висела в памяти. Фленов в "Delphi глазами хакера" приводил такой вариант:
Код:
while GetMessage (Msg, HInstance, 0, 0) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
//где-нибудь тут пишется свой код
end;
Но у меня на машине этот способ безбожно тормозил и грузил процессор на 100%, поэтому я делаю так:
Код:
while GetMessage (Msg, HInstance, 0, 0) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
//где-нибудь тут пишется свой код
Sleep(100);
end;
Может, можно делать как-то более правильно, но я честно не знаю как. Да и в принципе, меня так вроде устраивает.
|
|
|

24.12.2009, 09:31
|
|
Постоянный
Регистрация: 14.04.2008
Сообщений: 327
С нами:
9512608
Репутация:
69
|
|
Вот тут есть это
_http://www.realcoding.net/article/view/250
|
|
|

24.12.2009, 10:14
|
|
Новичок
Регистрация: 20.11.2009
Сообщений: 11
С нами:
8670855
Репутация:
0
|
|
Привет всем! Всех с наступающим новым годом!!! Задача: некоторая программа должна реагировать на события от мыши, глобально, например, при передвижении мыши по экрану (или клике в любой области экрана) должно происходить какое-либо действие (например, запись координат в файл или т.п.). Как это реализовать на с++ winapi? обязательно ли нужен хук или есть другие варианты? может, у кого-то кусочки кода есть? (событие может быть и от клавы, например, нажатие любой клавиши!)
Последний раз редактировалось -CEREBRUM-; 24.12.2009 в 10:19..
|
|
|

24.12.2009, 11:13
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами:
10097606
Репутация:
3349
|
|
2 -CEREBRUM-
<brainfuck>
ты читать умеешь?
>>> Как это реализовать на с++ winapi? <<
Нахера ты это кинул в теме про делфи и паскаль? Если есть прекрепленная тема для этих языков.
</brainfuck>
Вообще такие вещи делаются через установку ловушек (SetWindowsHookEx )
Но если тебе нужны координаты, то через определенное время просто получай координаты мышки (GetCursorPos). К примеру через цикл с паузой с маленьким интервалом ожидания или через таймер. И если координаты изменились, то сохрани их в файл.
Если юзать SetWindowsHookEx то можно заюзать ловушку WH_JOURNALRECORD - для ней даже DLL писать не надо.
Если юзать ловушку WH_MOUSE то нужна DLL.
в 5005 статей по делфи есть статья - Создание мышиного перехватчика
и там всё написано на winapi так что написать это на С++ несоставит труда
|
|
|

24.12.2009, 11:43
|
|
Новичок
Регистрация: 20.11.2009
Сообщений: 11
С нами:
8670855
Репутация:
0
|
|
Сообщение от slesh
Нахера ты это кинул в теме про делфи и паскаль?
Сорри, по невнимательности.
Сообщение от slesh
Если юзать SetWindowsHookEx то можно заюзать ловушку WH_JOURNALRECORD - для ней даже DLL писать не надо.
Спасибо, то что надо!
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|