Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1356364173
Es
2012-12-24 19:49
2013.04.28
ADO, ошибка в провайдере MSDAORA при select... for update


15-1356595975
DevilDevil
2012-12-27 12:12
2013.04.28
Мозговой штурм на тему разработки клиент-серверного приложения


10-1184304459
d_oleg
2007-07-13 09:27
2013.04.28
DataSnap: "взаимоотношения" RDM между собой


15-1356650625
ННН
2012-12-28 03:23
2013.04.28
Где находится IE?


2-1350293913
Дмитрий С
2012-10-15 13:38
2013.04.28
Сравнить два пути к файлу.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский