Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.06;
Скачать: CL | DM;

Вниз

Socket.Data   Найти похожие ветки 

 
DrimS ©   (2003-08-08 14:37) [0]

У ServerSocket есть свойство DATA типа Pointer, хотелось бы при подключении клиента к серверу в это свойство записывать некоторуюю информацию и потом ее использовать. Видел такой пример там присваивание идет в событии OnGetSocket, а потом используется где угодно. Например можно было бы вытаскивать информацию по каждому подключению в цикле... если есть пример с этим свойством, прошу описать или прислать на почту...


 
panov ©   (2003-08-08 14:43) [1]

TCustomWinSocket.Data - обычный указатель.
Присваиваешь ему ссылку на Record(например) и работаешь.
Конечно, надо не забывать выделять и удалять память под структуры или перменные, которые используются.
Самый простой пример: Data используется для идентификации.

Хотя в этом примере есть неправильность(Нарушение уникальности при удалении из SockList).

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;

type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
SockList: TList;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
SockList := TList.Create;
ServerSocket1.Port := 5000;
ServerSocket1.Open;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SockList.Free;
end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.Data := pointer(SockList.Add(Socket));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
Sock: TCustomWinSocket;
begin
if SockList.Count=0 then
begin
ShowMessage("No active connections!");
Exit;
end;
for i := 0 to SockList.Count-1 do
begin
Sock := SockList[i];
if Integer(Sock.Data)=1 then
begin
Sock.SendText("Socket N "+IntToStr(i));
Exit;
end;
end;
ShowMessage("Socket not found!");
end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
i: Integer;
Sock: TCustomWinSocket;
begin
for i := 0 to SockList.Count-1 do
begin
Sock := SockList[i];
if Sock=Socket then
begin
SockList.Delete(i);
Exit;
( "Disconnect:Socket not found!") TCustomWinSocket.Data - обычный указатель.
Присваиваешь ему ссылку на Record(например) и работаешь.
Конечно, надо не забывать выделять и удалять память под структуры или перменные, которые используются.
Самый простой пример: Data используется для идентификации.

Хотя в этом примере есть неправильность(Нарушение уникальности при удалении из SockList).

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;

type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
SockList: TList;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
SockList := TList.Create;
ServerSocket1.Port := 5000;
ServerSocket1.Open;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SockList.Free;
end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.Data := pointer(SockList.Add(Socket));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
Sock: TCustomWinSocket;
begin
if SockList.Count=0 then
begin
ShowMessage("No active connections!");
Exit;
end;
for i := 0 to SockList.Count-1 do
begin
Sock := SockList[i];
if Integer(Sock.Data)=1 then
begin
Sock.SendText("Socket N "+IntToStr(i));
Exit;
end;
end;
ShowMessage("Socket not found!");
end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
i: Integer;
Sock: TCustomWinSocket;
begin
for i := 0 to SockList.Count-1 do
begin
Sock := SockList[i];
if Sock=Socket then
begin
SockList.Delete(i);
Exit;
end;
end;
ShowMessage("Disconnect:Socket not found!");
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2003.10.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
1-18366
ARTEMKA
2003-09-26 01:20
2003.10.06
Подсветка в TreeView


1-18390
eLig
2003-09-22 17:02
2003.10.06
Хелп Ми!!!!


1-18297
prorok2
2003-09-24 09:29
2003.10.06
Неправильное отображение таблицы в TRichEdit


1-18465
WondeRu
2003-09-24 09:22
2003.10.06
Сервисы


1-18401
Вован
2003-09-25 15:32
2003.10.06
У когонибуть есть русский Consts.pas и DBConsts.pas ???