Форум: "Сети";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];
ВнизПересылка записи(тип 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c