Страница 1 из 2
Простая задача по использованию TCP/IP
Добавлено: 09 апр 2005, 22:45
Хыиуду
Задача такова.
Требуется написать программу, которая будет соединяться с произвольным сервером по указанному номеру порта, передавать на сервер произвольную строку, ждать отклик сервера и выводить его на экран локальной машины.
Просто я никогда в Дельфи с сетью не работал, даже не представляю себе, как это выглядит.
Добавлено: 11 апр 2005, 08:28
Dr.Grizzly
Как ты хочешь осуществить это? Тебе нужно будет как минимум на сервер к которому будешь цепляться бросить и запустить одну из твоих прог которая будет обрабатывать эти запросы от другой машины
Добавлено: 11 апр 2005, 17:42
Хыиуду
Ну, я так думаю, это будет выглядеть так: мой комп устанавливает с произвольным сервером (да все равно каким, хоть с соседним компом из локальной сети, и совсем не обязательно, чтобы на нем был Апач или что-то вроде) TCP/IP соединение и посылает туда что-то типа "dkjasdhhdjkshf" на указанный мной порт. Сервер, наверное, ответит что-то типа "Access denied" или "Bad command or filename", ну не знаю я, что нормальные серверы на такую белиберду отвечают. Вот этот Access denied мне и надо вывести, например, в Edit. Только как это все программно реализовать?
Добавлено: 12 апр 2005, 15:29
Dr.Grizzly
В таком случае тебе нужно будет использовать api функции или даже ассемблерные вставки на обработку сетевых пакетов. Тут я уже ничем помочь не могу, я только с компонентами балдею
Добавлено: 21 апр 2005, 22:41
Хыиуду
Я попробовал поюзать 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". С чем это может быть связано?
Добавлено: 21 апр 2005, 23:51
Zroman
А на сервере какой код?
Добавлено: 22 апр 2005, 08:48
LAngel
просто у тебя на локальной тачке не запущен сервер WEB
Если нет желания запускать оный, попробуй порт 135, он почти у всех соединения принимает.
А так - той код очень даже и рабочий.
Добавлено: 22 апр 2005, 09:15
Хыиуду
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 порту?
Добавлено: 22 апр 2005, 09:35
LAngel
Он просто перешел в режим чтения данных. Пока не прочитает те 100 символов не отдаст управление.
Можно проверять сколько байт пришло для чтения, или организовать чтение отдельным потоком.
Добавлено: 22 апр 2005, 10:26
LAngel
Если интересно - маленький примерчик по использованию idClient:
http://netroad.ru/~vadim1313/idcl.rar