Форум: "Начинающим";
Текущий архив: 2013.04.28;
Скачать: [xml.tar.bz2];
ВнизПочему то не работает TClientSocket (RAD2010) Найти похожие ветки
← →
Pcrepair © (2012-09-25 23:37) [0]Добрый день. решил попробовать сокеты.
такой код: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-09-26 00:12) [1]У TClientSocket есть парный ему класс.
← →
Германн © (2012-09-26 01:55) [2]
> Пробовал в режиме трассировки. доходит до Button1Click -
> и ничего. а вот Button2Click нормально проходит трассировку
Переведи.
← →
Pcrepair © (2012-09-26 08:10) [3]нажимаем на Ф7, идет компиляция программы. одно, другое и так до появления формы с кнопками. нажимаем батон1 - ничего. нажимаем батон2 - как положено переходить к обработчику и далее.
← →
Сергей М. © (2012-09-26 09:24) [4]Это сокеты виноваты.
Если бы не сокеты, то нажимаем батон1 и сразу видим "чего".
Не пробовал бы ты их - кислые они.
> может что не так в синтксисе?
Ты же уже до трассировки дошел, какой к лешему синтаксис ?
Трассировка не может быть осуществлена, если код не скомпилирован в принципе по причине, например, "не так в синтксисе".
← →
Dimka Maslov © (2012-09-26 10:09) [5]Остаётся теперь только задаться вопросом, а есть ли на компьютере с адресом 127.0.0.1 активный сервер, слушающий порт 80. А есть ли вообще... Впрочем об этом ужа давно всё сказано.
← →
Pcrepair © (2012-09-26 14:20) [6]да уж есть и сервер и порт, не глупее тебя, будь уверен
а че ты там сказал? да еще и все
← →
Сергей М. © (2012-09-26 15:36) [7]> лейбл показывает что сокет не запустился, не активный
И правильно показывает.
Сокет-то неблокирующий..
И "запустится" он не раньше события OnConnect.
Или не "запустится", но не раньше события OnError.
← →
Pcrepair © (2012-09-26 19:19) [8]откуда такая информация, что цокет неблокирующий? и в том и в другом случае результат одинаковый
кстати по поводу события OnConnect...
можно выставить какой угодно ИП-адрес а оно все равно выдает что OnConnect есть. а к чему оно подключается когда такого ИП-адреса в сети просто нет?
← →
Сергей М. © (2012-09-26 22:00) [9]
> откуда такая информация, что цокет неблокирующий?
Оттуда.
Блокирующий сокет при неуспешной попытке подключения возбудит исключение, и до строкиif ClientSocket1.Active = True then
выполнение программы попросту не дойдет.
> оно все равно выдает что OnConnect есть
Кто "оно" ?)
В приведенном тобой коде нет ни малейшего намека на обработку ни одного из событий сокета, коих у него немало и каждое из которых весьма важно при работе в неблок.режиме и совершенно неважно иначе)
← →
Pcrepair © (2012-09-27 09:04) [10]ну есть и другие варианты, на месте никто не стоит
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-27 09:42) [11]В условиях полной неадаптированности пакета этих компонентов к юникоду работать они как им положено не будут.
← →
avtomk@narod.ru (2012-10-17 02:41) [12]Удалено модератором
Примечание: не надо писать чушь
← →
Сергей М. © (2012-10-17 10:15) [13]
> ClientSocket1.Create(nil);
Мдя ..
Сложно выдумать бред бредовей чем реинициализация уже существующего экземпляра TClientSocket)
> ClientSocket1.Free;
Это тоже порадовало - TClientSocket по всей вероятности уже лежит на форме, это означает что форма при создании сама автоматически создаст и инициализирует объект, соответственно при разрушении сама же автоматически его уничтожит.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.04.28;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.002 c