![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пересылка записи(тип record) через Сокет. [D6, WinXP]
alexd1 © (2003-06-04 20:48:00)Вот вобщем то и вопрос. Как это организовать и по красивее...?
alexdbases (2003-06-05 10:42:00) [1]>Digitman спаисбо оргомное =)
alexdbases (2003-06-05 10:40:00) [2]Все спасибо разоврался......все нормально.....
Я имена смешал......
вместо Buffer или какого нить другого имени выбрал Buf.....
Оказалось это уже зарезервированное имя....
Digitman (2003-06-05 10:39:00) [3]1. TUserInfo = packedrecord !!!!
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:23:00) [4]to Polevi Попробовал твою пересылку......вырубило и сервер и клиента ....не выводя ни каких ошибок.....просто слетели и всё =)
alexdbases (2003-06-05 10:14:00) [5]а нельза на прямую
type
PUserInfo=^TUserInfo
var
///buffer:Pointer;
ui:PUserInfo;
begin
GetMem(Buffer,sizeof(TUserInfo));
Socket.ReceiveBuf(ui^,sizeof(TUserInfo));
// ui:=PUserInfo(buffer);
нет я понимаю....пробовал уже .....нельзя ....вот причина не ясна...четко....
Polevi (2003-06-05 10:06:00) [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 09:54:00) [7]я конечно понимаю что можно зарядит все это в буфер а на клиенте принять ......но как это по красивее.....=)..
AlexDBases (2003-06-05 09:44:00) [8]type
UserInfo = record
ID: integer;
UserName: string[20];
FN: string[40];
LN: string[40];
MN: string[40];
Email: string[20];
Prof: string[20];
end;
Digitman (2003-06-05 09:35:00) [9]
> AlexDBases
приведи точную декларацию структуры
AlexDBases (2003-06-05 09:31:00) [10]2digitman режим не блок.......запись занимает 240 байт.....есть интежер остальные стринг фиус длинны ...
Digitman (2003-06-05 08:26:00) [11]зависит от типа полей записи и от режима работы гнезда (блок., неблок.)