![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему то не работает TClientSocket (RAD2010)
Pcrepair © (2012-09-25 23:37:00)Добрый день. решил попробовать сокеты.
такой код:
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
Сергей М. (2012-10-17 10:15:00) [1]
> ClientSocket1.Create(nil);
Мдя ..
Сложно выдумать бред бредовей чем реинициализация ужесуществующего экземпляра TClientSocket)
> ClientSocket1.Free;
Это тоже порадовало - TClientSocket по всей вероятности ужележит на форме, это означает что форма при создании сама автоматически создаст и инициализирует объект, соответственно при разрушении сама же автоматически его уничтожит.
avtomk@narod.ru (2012-10-17 02:41:00) [2]Удалено модератором
Примечание: не надо писать чушь
Сергей М. (2012-09-27 09:42:00) [3]В условиях полной неадаптированности пакета этих компонентов к юникоду работать они как им положено не будут.
Pcrepair (2012-09-27 09:04:00) [4]ну есть и другие варианты, на месте никто не стоит
implementation
{$R *.dfm}
procedure TForm1.btn2Click(Sender: TObject);
begin
ClientSocket1.Socket.SendText(mmoSendText.Text); //посылаем сообщение
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
ClientSocket1.Port := StrToInt(edtPort.text); //устанавливаем порт
ClientSocket1.Address := edtIP.text; //IP адресс сервера если на одном компе можно просто 192.168.1.2
//ClientSocket1.Host:=edtIP.text; (*только для имени далее ДНС получает адрес*)
ClientSocket1.Active :=True; //Коннектимся
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Active :=False;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Caption := 'Подключились к ' + edtIP.text; //Если подключились покажем это, ВОТ ТУТ показывает что подключилось к какому угодно IP в том числе несуществующему
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
form1.Caption := 'Связь разорвана'; //Связь разорвана =(
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ShowMessage('Ошибка №' + IntToStr(ErrorCode)); //Возникла ошибка
ErrorCode :=0; //Забъем на нее
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
mmoMsg.Lines.Add('[Server]::' + Socket.ReceiveText); //Нам сообщенице
end;
end.
Сергей М. (2012-09-26 22:00:00) [5]
> откуда такая информация, что цокет неблокирующий?
Оттуда.
Блокирующий сокет при неуспешной попытке подключения возбудит исключение, и до строкиif ClientSocket1.Active = True thenвыполнение программы попросту не дойдет.
> оно все равно выдает что OnConnect есть
Кто "оно" ?)
В приведенном тобой коде нет ни малейшего намека на обработку ни одного из событий сокета, коих у него немало и каждое из которых весьма важно при работе в неблок.режиме и совершенно неважно иначе)
Pcrepair (2012-09-26 19:19:00) [6]откуда такая информация, что цокет неблокирующий? и в том и в другом случае результат одинаковый
кстати по поводу события OnConnect...
можно выставить какой угодно ИП-адрес а оно все равно выдает что OnConnect есть. а к чему оно подключается когда такого ИП-адреса в сети просто нет?
Сергей М. (2012-09-26 15:36:00) [7]> лейбл показывает что сокет не запустился, не активный
И правильно показывает.
Сокет-то неблокирующий..
И "запустится" он не раньше события OnConnect.
Или не "запустится", но не раньше события OnError.
Pcrepair (2012-09-26 14:20:00) [8]да уж есть и сервер и порт, не глупее тебя, будь уверен
а че ты там сказал? да еще и все
Dimka Maslov (2012-09-26 10:09:00) [9]Остаётся теперь только задаться вопросом, а есть ли на компьютере с адресом 127.0.0.1 активный сервер, слушающий порт 80. А есть ли вообще... Впрочем об этом ужа давно всё сказано.
Сергей М. (2012-09-26 09:24:00) [10]Это сокеты виноваты.
Если бы не сокеты, то нажимаем батон1 и сразу видим "чего".
Не пробовал бы ты их - кислые они.
> может что не так в синтксисе?
Ты же уже до трассировкидошел, какой к лешему синтаксис ?
Трассировка не может быть осуществлена, если код не скомпилирован в принципепо причине, например, "не так в синтксисе".
Pcrepair (2012-09-26 08:10:00) [11]нажимаем на Ф7, идет компиляция программы. одно, другое и так до появления формы с кнопками. нажимаем батон1 - ничего. нажимаем батон2 - как положено переходить к обработчику и далее.
Германн (2012-09-26 01:55:00) [12]
> Пробовал в режиме трассировки. доходит до Button1Click -
> и ничего. а вот Button2Click нормально проходит трассировку
Переведи.
Плохиш (2012-09-26 00:12:00) [13]У TClientSocket есть парный ему класс.