Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Winsock send 
:(
    Опции темы
zoiberg111
Дата 17.5.2008, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 17.5.2008

Репутация: нет
Всего: нет



как отправить get\post
через Winsock

Нужно чтобы пакет из memo1.text отправлялся на сервер edit1.text и записывал ответ в edit2.text

Подкиньте пример пожалуйста,в нете мало что нашел

нужно отправить:
Этот пакет должен лежать в memo1
GET /yandsearch?text=%D0%9F%D0%90%D0%9A%D0%95%D0%A2 HTTP/1.1
User-Agent: Opera/9.50 (Windows NT 5.1; U; ru)
Host: www.yandex.ru
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://www.yandex.ru/yandsearch?text=%EC%E...%E2&rpt=rad
Cookie: yandexuid=4492561210321164; yabs-frequency=/2/swaz06C38UYAFG1W0poYA3q0NmCdCCen05y3VEfZ001V0oUUOZq0NmCd//fG9Z0mM30W00
Cookie2: $Version=1
Connection: Keep-Alive


PM MAIL   Вверх
SneG0K
Дата 17.5.2008, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 2
Всего: 54



Лови


Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  winsock.rar 3,27 Kb
PM WWW Skype   Вверх
zoiberg111
Дата 17.5.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 17.5.2008

Репутация: нет
Всего: нет



Спс,
Но не соединяеться с сервером ,выдает ошибку Timeout
PM MAIL   Вверх
SneG0K
Дата 17.5.2008, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 2
Всего: 54



Цитата(zoiberg111 @  17.5.2008,  14:11 Найти цитируемый пост)
выдает ошибку Timeout 

Ну значит сервер не доступен. И вообще я тебе тока так набросок сделал. К гуглу запрос приходил.
PM WWW Skype   Вверх
zoiberg111
Дата 18.5.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 17.5.2008

Репутация: нет
Всего: нет






Нажимаю на кнопку,программа зависает и не развисает...
посмотрел на снифер:
GET удачно отправлено, ответ 200 OK и весь хтмл код страницы . 

Почему у меня программа зависает,а через снифер показывает что отправлено  и принято за 1 сек?



Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,winsock, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
wsdata : TWSAData;
host:string;
adr: sockaddr_in;
implementation
function Resolve(host: string):string;
var
IP:string;
hostEnt : PHostEnt;
hostName : array [0..255] of char;
addr : PChar;
begin
result:=host;
try
strpcopy(hostname, host);
hostEnt := gethostbyname(hostName);
if Assigned(hostEnt) and Assigned(hostEnt^.h_addr_list) then
begin
addr:=hostEnt^.h_addr_list^;
IP:=Format('%d.%d.%d.%d', [byte(addr[0]), byte(addr[1]), byte(addr[2]), byte(addr[3])]);
end;
result:=ip;
except
end;
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
ans: string;
i: integer;
req,data: string;
buf: array[0..500] of char;
Sock:TSocket;
begin
host :=resolve('yandex.ru');
adr.sin_addr.s_addr :=inet_addr(pchar(host));
adr.sin_family :=AF_INET;
adr.sin_port :=htons(80);
 //
  Sock        :=Socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
  if Sock     =-1 then Exit;
  if connect(sock,adr,sizeof(adr))<>0 then CloseSocket(Sock);

req:=memo1.text+#13#10#13#10;
   //
    i:= send(Sock,pointer(req)^,length(req),0);
        if i=SOCKET_ERROR then exit;
        ZeroMemory(@buf,sizeof(buf));
        repeat
        i:= recv(Sock,buf,sizeof(buf),0);
        if i=SOCKET_ERROR then begin
// тут если ошибка
        end;
       ans:= ans + buf;
    
        until
        pos('<html>',ans)>0;
        closesocket(Sock);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 wsaStartup(MAKEWORD(2,2), wsData);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
wsaCleanup;
end;


end.


PM MAIL   Вверх
Qu1nt
Дата 18.5.2008, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 2
Всего: 50



Как-нибудь так:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
  Host = 'ya.ru';

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Data : string = 'GET / HTTP/1.1' + #13#10 +
         'Host: ' + Host + #13#10 +
         'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)' + #13#10 +
         'Accept: text/html' + #13#10 +
         'Connection: close' + #13#10#13#10;

implementation

{$R *.dfm}

uses
  WinSock;

procedure TForm1.Button1Click(Sender: TObject);
var
  Sock    : TSocket;
  Addr    : TSockAddr;
  HostEnt : PHostEnt;
  Res     : Integer;
  Buf     : array [0..1023] of Char;
  Source  : string;
begin
  Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if Sock = INVALID_SOCKET then
    Exit;
  HostEnt := gethostbyname(PChar(Host));
  if HostEnt = nil then
    Exit;
  with Addr do
  begin
    sin_family := AF_INET;
    sin_port   := htons(80);
    sin_addr   := PInAddr(HostEnt^.h_addr_list^)^;
  end;
  if connect(Sock, Addr, SizeOf(TSockAddr)) = SOCKET_ERROR then
    if WSAGetLastError() <> WSAEWOULDBLOCK then
      Exit;
  Res := send(Sock, Data[1], Length(Data), 0);
  if Res = SOCKET_ERROR then
    Exit;
  repeat
    Res := recv(Sock, Buf, SizeOf(Buf), 0);
    if Res = SOCKET_ERROR then
      Exit;
    if Res > 0 then
      Source := Source + Copy(Buf, 0, Res);
  until Res <= 0;
  CloseSocket(Sock);
  Memo1.Text := Source;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  WSAData : TWSAData;
begin
  if WSAStartup($101, WSAData) <> 0 then
    Exit;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  WSACleanup;
end;

end.

Ы?
PM MAIL   Вверх
zoiberg111
Дата 18.5.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 17.5.2008

Репутация: нет
Всего: нет



Огромное спасибо тебе!!!
PM MAIL   Вверх
Qu1nt
Дата 18.5.2008, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 2
Всего: 50



Заходи еще!)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0446 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.