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

Вниз

Пересылка записи(тип record) через Сокет.   Найти похожие ветки 

 
alexd1   (2003-06-04 20:48) [0]

Вот вобщем то и вопрос. Как это организовать и по красивее...?


 
Digitman ©   (2003-06-05 08:26) [1]

зависит от типа полей записи и от режима работы гнезда (блок., неблок.)


 
AlexDBases ©   (2003-06-05 09:31) [2]

2digitman режим не блок.......запись занимает 240 байт.....есть интежер остальные стринг фиус длинны ...


 
Digitman ©   (2003-06-05 09:35) [3]


> AlexDBases


приведи точную декларацию структуры


 
AlexDBases ©   (2003-06-05 09:44) [4]

type
UserInfo = record
ID: integer;
UserName: string[20];
FN: string[40];
LN: string[40];
MN: string[40];
Email: string[20];
Prof: string[20];
end;


 
alexdbases ©   (2003-06-05 09:54) [5]

я конечно понимаю что можно зарядит все это в буфер а на клиенте принять ......но как это по красивее.....=)..


 
Polevi ©   (2003-06-05 10:06) [6]

type
PUserInfo=^TUserInfo

var
buffer:Pointer;
ui:PUserInfo;
begin
GetMem(Buffer,sizeof(TUserInfo));
Socket.ReceiveBuf(Buffer^,sizeof(TUserInfo));
ui:=PUserInfo(buffer);

отправка аналогично


 
alexdbases ©   (2003-06-05 10:14) [7]

а нельза на прямую
type
PUserInfo=^TUserInfo

var
///buffer:Pointer;
ui:PUserInfo;
begin
GetMem(Buffer,sizeof(TUserInfo));
Socket.ReceiveBuf(ui^,sizeof(TUserInfo));
// ui:=PUserInfo(buffer);

нет я понимаю....пробовал уже .....нельзя ....вот причина не ясна...четко....


 
alexdbases ©   (2003-06-05 10:23) [8]

to Polevi Попробовал твою пересылку......вырубило и сервер и клиента ....не выводя ни каких ошибок.....просто слетели и всё =)


 
Digitman ©   (2003-06-05 10:39) [9]

1. TUserInfo = packed record !!!!

2.

type

TMyForm = class(TForm)
...
ClientSocket1: TClientSocket;
...
private
ms: TMyMemoryStream;
procedure DoOnStreamDestroyed(Sender: TObject);
...
end;

TMyMemoryStream = class(TMemoryStream)
private
FOnDestroy: TNotifyEvent;
public
constructor Create(OnDestroy: TNotifyEvent);
destructor Destroy; override;
end;

...

implementation

var
UserInfo : TUserInfo;
...

{ TMyForm }

procedure TMyForm.DoOnStreamDestroyed(Sender: TObject);
begin
ms := nil;
end;

...

constructor TMyMemoryStream.Create(OnDestroy: TNotifyEvent);
begin
inherited;
FOnDestroy := OnDestroy;
end;

destructor TMyMemoryStream.Destroy;
begin
if Assigned(FOnDestroy) then
FOnDestroy(Self);
inherited;
end;

...

{ TMyForm }

procedure TMyForm.ClientSocket1Write(Sender: TObject; Socket: TCustomWinSocket);
begin
Socket.SendStream(ms);
end;

procedure TMyForm.Button1Click(Sender: TObject);
var
CurPos: Integer;
begin
if not Assigned(ms) then
ms := TMyMemoryStream.Create(DoOnStreamDestroyed);
try
with ms do
begin
CurPos := Position;
Position := Size;
Write(UserInfo, SizeOf(UserInfo));
Position := CurPos;
end;
ClientSocket1.Socket.SendStream(ms);
except
FreeAndNil(ms);
raise;
end;
end;


 
alexdbases ©   (2003-06-05 10:40) [10]

Все спасибо разоврался......все нормально.....
Я имена смешал......
вместо Buffer или какого нить другого имени выбрал Buf.....
Оказалось это уже зарезервированное имя....


 
alexdbases ©   (2003-06-05 10:42) [11]

>Digitman спаисбо оргомное =)



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

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

Наверх




Память: 0.49 MB
Время: 0.018 c
1-33171
Yuraz
2003-07-24 16:01
2003.08.11
Парсировка xml файла. Есть ли что автоматизированное? Компаненты


6-33244
Инна
2003-06-04 20:51
2003.08.11
excel-отчет в инете


8-33232
Serg123
2003-04-14 15:37
2003.08.11
Получение свойств avi файла


1-33193
sergg
2003-07-24 17:42
2003.08.11
Получение имени каталога с помощью TOpenDialog


14-33309
ЛОМАК
2003-07-24 16:59
2003.08.11
Я ломак! Что такое Design-time?