Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.009 c
6-33249
drnet
2003-06-06 03:58
2003.08.11
TWebBrowser не отрабатывает OnBeforeNavigate под XP


3-33045
Vitas2
2003-07-18 07:02
2003.08.11
Сортировка


1-33211
Толик
2003-07-28 16:53
2003.08.11
баги VCL - продолжение


1-33172
Совенок
2003-07-28 06:28
2003.08.11
указать размер полей Word-документа


1-33224
Vyacheslav
2003-07-29 15:27
2003.08.11
Как зашить exe в новый exe




   Наверх