Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
7-18653
stkatch
2003-07-22 10:06
2003.10.06
MessageBox и другие визуальные компоненты Windows в сервисах


1-18466
Developerr
2003-09-24 13:09
2003.10.06
Как можно определить день недели?


11-18285
Pirat
2003-01-24 02:14
2003.10.06
прозрачные окна


3-18252
victor_ch
2003-09-14 14:26
2003.10.06
как работать с SQL-DMO


1-18312
Abikos
2003-09-23 20:09
2003.10.06
функция обратная StrToHex





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский