я просто скопирую свой пост из другого форума, если будут конкретные вопросы - пиши.
ну.... давай по порядку.
жил да был.... Unix. и озадачились чуваки проблемой обмена информацией в сетях tcp/ip. и придумали они сокеты (парадигма сокетов как таковая была разработана Berkeley Software Distribution - BSD). сокеты представляют из себя интерфейс, позволяющий слать по сетке сообщения, потоки и пр. в общем, что угодно вплоть до real-time обмена мультимедийной информацией. Потом пришёл дядя Гейтс. поглядел. понравилось. но поскольку дядя сей, как говориться, "умишком скуден, хуишком - блуден", то и сделал он то, что делал всю жизнь (и на чём, собственно, и разбогател): взял классную обкатанную чужую технологию, обозвал её Windows Sockets 2 API, написал на неё баламутное SDK, включил в состав своих сраных виндов (написанных на ворованном досе) и принялся продавать. вот таким вот образом на сегодняшний день мы имеем механизм обмена данными для протоколов tcp/ip. Ну а Borland натянула на этот механизм свою обычную vcl-оболочку и таким образом возникло два компонента: TServerSocket и TClientSocket. в 7-ке, если я не ошибаюсь, их заменили TcpServer и TcpClient, но фиг нафиг не меняется.
ServerSocketзадаётся адрес (Address) и порт (Port). При установке Active в TRUE запускается поток, который "слушает" указанный порт на предмет сторонних подключений. при возникновении подключения возникает событие OnAccept.
ClientSocketзадаётся адрес (Address), по которому живёт предполагаемый сервер, и порт (Port), на котором он ждёт подключений. При установке Active в TRUE происходит соединение с сервером. есс-но, что сервер должен быть заранее запущен. при подключении возникает событие OnConnect.
оба компонента (а вернее, их общий прапредок - TCustomWinSocket) умеют посылать и и принимать данные по сетке.
вот это краткие азы. на самом деле оба компонента представляют собой "обёртку" вокруг непосредственно сокетов, и нюансов там масса, но это уже разберёшься сам, всё достаточно прозрачно.
в заключение простой пример.
Project1 (Unit1)
на форме - ServerSocket1 (Host = <имя_моего_компьютера>, Port = 1234, Active = TRUE), Memo1, Edit1, Button1.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, StdCtrls;
type
TForm1 = class(TForm)
ss: TServerSocket;
Memo1: TMemo;
Edit1: TEdit;
Button1: TButton;
procedure ssAccept(Sender: TObject; Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
|$R *.DFM"
procedure TForm1.ssAccept(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Add (Socket.RemoteHost + ' connected at ' + DateTimeToStr (Now));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to ss.Socket.ActiveConnections - 1 do
ss.Socket.Connections [i].SendText (Edit1.Text);
end;
end.
Project2 (Unit2)
на форме - ClientSocket1 (Host = <имя_моего_компьютера>, Port = 1234, Active = TRUE).
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, StdCtrls;
type
TForm2 = class(TForm)
cs: TClientSocket;
procedure csConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure csRead(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
|$R *.DFM"
procedure TForm2.csConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
Caption := 'Connected to ' + Socket.RemoteHost;
end;
procedure TForm2.csRead(Sender: TObject; Socket: TCustomWinSocket);
begin
ShowMessage (Socket.ReceiveText);
end;
end.
запусти Project1, потом - Project2. и шли на здоровье сообщения. ну а дальше, я думаю, сам разберёшься - ввести виды сообщений, в зависимости от них - выполнять различные действия, и т.д.
удачи