Организация связи между компьютерами через TCP и IP протокол
Советы »
TCP/IP » Организация связи между компьютерами через TCP и IP протокол
Конечно, перед вами наверняка вставала проблема организации связи, ну или хотя
бы вы желали установить её для разных целей..:)
Я попробую вам помочь. Для плодотворной работы у вас должны быть хоть
какие-нибудь навыки программирования на 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...
Позже напишу статью о том, как пересылать через сокеты любую информацию, не
только текстовую, а также как пересылать потоки...
Другое по теме: