Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.09.2012, 23:44
Pcrepair
 
Сообщения: n/a
По умолчанию Почему то не работает TClientSocket (RAD2010)

Добрый день. решил попробовать сокеты.
такой код:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
   ClientSocket1.Host := '127.0.0.1';  (*тут веб-сервер*)
   ClientSocket1.Port := 80;
   ClientSocket1.Open;
   (*специально для проверки дописал вот это*)
   if ClientSocket1.Active = True then
   Label1.Caption:='IT OPEN'; (*лейбл показывает что сокет не запустился, не активный*)
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   ClientSocket1.close;
end;

Пробовал в режиме трассировки. доходит до Button1Click - и ничего. а вот Button2Click нормально проходит трассировку
пробовал далее ClientSocket1.Socket.SendText('GET /index.php HTTP/1.1'#13#10); по ClientSocket1Connect и далее Memo1.Lines.Add(Socket.ReceiveText), но конечно ничего не вышло, поскольку метод OPEN не работает?

Вопрос: может что не так в синтксисе? все примеры из Д7
Ответить с цитированием
  #2  
Старый 25.09.2012, 23:56
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

А браузер то страницу http://127.0.0.1/ открывает?
Трассировка в OnConnect входит? Если да, то запрос не до конца отправляешь, вот и нету ответу.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 26.09.2012 в 00:01.
Ответить с цитированием
  #3  
Старый 26.09.2012, 08:15
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

потому что по умолчанию ClientType == ctNonBlocking, т.е. не блокирующий (асинхронный) сокет. каждая операция завершается с уведомлением по соответствующему событию. Open - OnConnect (если, конечно, успешно), принятые данные - OnRead...

Код:
  ClientSocket1.ClientType:=ctBlocking;
  ClientSocket1.Host:='ya.ru';
  ClientSocket1.Port:=80;
  ClientSocket1.Open;
  if ClientSocket1.Active then Caption:='Active';
  ClientSocket1.Socket.SendText('GET / HTTP/1.0'#13#10#13#10);
  Sleep(2500);
  Memo1.Text:=ClientSocket1.Socket.ReceiveText;
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 26.09.2012 в 08:18.
Ответить с цитированием
  #4  
Старый 26.09.2012, 08:16
Pcrepair
 
Сообщения: n/a
По умолчанию

браузер конечно страницу открывает
до OnConnect вообще дело не доходит, метыд OPEN не работает
Ответить с цитированием
  #5  
Старый 26.09.2012, 08:26
Pcrepair
 
Сообщения: n/a
По умолчанию

Цитата:
Сообщение от NumLock
потому что по умолчанию ClientType == ctNonBlocking, т.е. не блокирующий (асинхронный) сокет. каждая операция завершается с уведомлением по соответствующему событию. Open - OnConnect (если, конечно, успешно), принятые данные - OnRead...

Код:
  ClientSocket1.ClientType:=ctBlocking;
  ClientSocket1.Host:='ya.ru';
  ClientSocket1.Port:=80;
  ClientSocket1.Open;
  if ClientSocket1.Active then Caption:='Active';
  ClientSocket1.Socket.SendText('GET / HTTP/1.0'#13#10#13#10);
  Sleep(2500);
  Memo1.Text:=ClientSocket1.Socket.ReceiveText;

все то же самое. не работает. при трассировке доходит до открытия формы, нажимаю на форме батон1 - ничего. нажимаю батон2 - переходить на код обрабоки
Ответить с цитированием
  #6  
Старый 26.09.2012, 08:28
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

http://zalil.ru/33788767
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 26.09.2012, 08:34
Pcrepair
 
Сообщения: n/a
По умолчанию

у меня вообщето РАД2010 а не Д7
видимо что то не включено или чего еще надо кроме как установить TClientSocket?? косячок явно системный а не в коде
Ответить с цитированием
  #8  
Старый 17.10.2012, 02:43
Pcrepair
 
Сообщения: n/a
По умолчанию

все получилось по простому:

Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   ClientSocket1.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   ClientSocket1.Create(nil);
end;
Ответить с цитированием
  #9  
Старый 17.10.2012, 09:24
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Смех

и ведь не на один форум это написал.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #10  
Старый 17.10.2012, 10:15
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Прямо вот так и написал?
Код:
procedure TForm1.FormCreate(Sender: TObject); 
begin
   ClientSocket1.Create(nil); 
end;


А не вот так?
Код:
procedure TForm1.FormCreate(Sender: TObject); 
begin
   ClientSocket1 := TClientSocket.Create(nil); 
end;
Ответить с цитированием
  #11  
Старый 19.10.2012, 00:47
Pcrepair
 
Сообщения: n/a
По умолчанию

тем не менее, кто бы что не кукарекал, в РАД2010 и выше только так и работает:
1. нужно создать
2. использовать
3. уничтожить

остальное детали
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:06.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025