![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Организация связи между компьютерами через TCP и IP протоколDelphi , Интернет и Сети , TCP/IP
Оформил: DeeCo Автор: CyANiD Конечно, перед вами
наверняка вставала проблема организации связи, ну или хотя бы вы
желали установить её для разных целей..:)
Я попробую вам помочь. Для
плодотворной работы у вас должны быть хоть какие-нибудь навыки
программирования на Delphi, вы должны хоть чуть-чуть знать о TCP/IP
и как это работает, ну и самое главное - сокеты. Может конечно
попозже вы разберетесь, что это такое, но эту статью я рассчитываю
на тех людей, кто хоть слышал это слово...
Программируя на Delphi, я
писал различные программы, но вскоре стал интересоваться, как
организовать связь между компьютерами, как переслать информацию.
Стал лазить по всей палитре компонентов и увидел что-то похожее на
розетку, в которую втыкают шнур, и розетку, которую очень бережно
держит чья-то рука. Как потом после чтения Help'а оказалось, что это
компоненты для работы с сокетами. На тот момент я уже имел
представления о них, поэтому понял сразу, что это то, что мне нужно.
Эти компоненты называются TClientSocket и TServerSocket. Как понятно
из названий, один обеспечивает серверную часть, другой
клиентскую.
Чтобы подсоединить клиент
к серверу, клиенту необходимо указать адрес сервера (IP-адрес или
имя). Это свойства Address (IP) и Host (Имя). В целом присоединиться
можно только по одному параметру, но по IP - быстрее. Сами подумайте
почему...
Еще одним главным
параметром является рабочий порт сервера. Кстати заметьте, что в
TServerSocket его необходимо указывать тоже. Как уже наверное вы
поняли, указанный порт в клиенте должен совпадать с портом,
указанного у сервера. Для обычной связи остальные параметры можно не
менять. Я бы сказал их вообще лучше даже не менять.
Возникает резонный вопрос,
так как все же присоединиться. Чтобы это осуществить, сначала
запускаем сервер. Делаеться это просто: в обработчике событий
(любом, будь то onClick или onCreate) пишем
"ServerSocket1.Active:=True;". Тем самым мы запустили сервер. Чтобы
присоединить клиент делаем тоже самое для TClientSocket.
Какие события
обрабатываются при подсоединении, отсоединении, ошибке, я думаю вы
поймете сами. Интересней, какие события возникают при получении
информации. Когда сервер получает информацию обрабатываеться
onClientRead, хотя интуиция склоняет в сторону onClientWrite. Здесь
она неправа.
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var Str: string; RemIP: string; begin RemIP := Socket.RemoteAddress; Str := Socket.ReceivedText; end; После этого в переменной
Str содержится полученное сообщение(текстовое), а в переменной RemIP
- адрес отправителя сообщения.
Для посылки сообщения с
сервера клиентам следует написать процедуру procedure TForm1.SendMes(Text: String);
var i: byte; begin with ServerSocket1.Socket do begin if ActiveConnections> 0 then for i := 0 to ActiveConnections - 1 do try Connections[i].SendText(Text); Application.ProcessMessages; except // end; end; {/WITH} end; ServerSocket1.Socket.Connections - это
массив всех сокетных соединений. Можно конечно работать с каждам
отдельно...
У TClientSocket дело
обстоит примерно также, поэтому описывать его не стану. Скажу, что у
клиента при получении информации обрабатываеться onRead...
Позже
напишу статью о том, как пересылать через сокеты любую информацию,
не только текстовую, а также как пересылать потоки...
Организация связи между компьютерами через TCP и IP протоколы в Delphi с помощью компонентов TClientSocket и TServerSocket. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |