Простая задача по использованию TCP/IP

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Задача такова.
Требуется написать программу, которая будет соединяться с произвольным сервером по указанному номеру порта, передавать на сервер произвольную строку, ждать отклик сервера и выводить его на экран локальной машины.
Просто я никогда в Дельфи с сетью не работал, даже не представляю себе, как это выглядит.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Как ты хочешь осуществить это? Тебе нужно будет как минимум на сервер к которому будешь цепляться бросить и запустить одну из твоих прог которая будет обрабатывать эти запросы от другой машины
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Ну, я так думаю, это будет выглядеть так: мой комп устанавливает с произвольным сервером (да все равно каким, хоть с соседним компом из локальной сети, и совсем не обязательно, чтобы на нем был Апач или что-то вроде) TCP/IP соединение и посылает туда что-то типа "dkjasdhhdjkshf" на указанный мной порт. Сервер, наверное, ответит что-то типа "Access denied" или "Bad command or filename", ну не знаю я, что нормальные серверы на такую белиберду отвечают. Вот этот Access denied мне и надо вывести, например, в Edit. Только как это все программно реализовать?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

В таком случае тебе нужно будет использовать api функции или даже ассемблерные вставки на обработку сетевых пакетов. Тут я уже ничем помочь не могу, я только с компонентами балдею
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Я попробовал поюзать IDTCPClient. Написал так:

Код: Выделить всё

  IDTCPClient1.host:=Edit1.Text;//В нем сейчас 127.0.0.1
  IDTCPClient1.BoundIP:=Edit1.Text;
  IDTCPClient1.Port:=strtoint(edit5.Text);//В нем 80
  IDTCPClient1.Connect;
  showmessage('Connected!');
На строке Connect прога выдает мне ошибку: "Socket error 10061: Connection refused". С чем это может быть связано?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Zroman
Сообщения: 75
Зарегистрирован: 20 апр 2005, 19:23
Откуда: Киев

А на сервере какой код?
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

просто у тебя на локальной тачке не запущен сервер WEB ;)

Если нет желания запускать оный, попробуй порт 135, он почти у всех соединения принимает.

А так - той код очень даже и рабочий.
С уважением, Lost Angel...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

2 LAngel: спасибо, 135 порт действительно принимает, сообщение "Connected!" выдает. Дальше я попробовал написать так:

Код: Выделить всё

  IDTCPClient1.Write(Edit6.Text);
  application.ProcessMessages;
  Edit2.Text:=IDTCPClient1.ReadString(100);
  application.ProcessMessages;
На строке Edit2.Text:=IDTCPClient1.ReadString(100); прога уходит в глухую несознанку. Ни на что не реагирует, кроме Ctrl-Alt-Del. Может, это как-то с фаерволлом связано? Или просто мой комп обучен не отвечать на всякие левые запросы по 135 порту?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

Он просто перешел в режим чтения данных. Пока не прочитает те 100 символов не отдаст управление.

Можно проверять сколько байт пришло для чтения, или организовать чтение отдельным потоком.
С уважением, Lost Angel...
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

Если интересно - маленький примерчик по использованию idClient:

http://netroad.ru/~vadim1313/idcl.rar
С уважением, Lost Angel...
Ответить