Текущий архив: 2007.09.16;
Скачать: CL | DM;
ВнизСокеты Найти похожие ветки
← →
Александр_К (2007-08-20 09:17) [0]Можно ли через сокет клиента передать указатель на
структуру к сокету серверу,чтобы этот указатель остался актуальным и не была потеря данных.
← →
Elen © (2007-08-20 09:42) [1]Указатель передать плевое дело, а данные по нему ты как читать собрался?
← →
Александр_К (2007-08-20 10:06) [2]просто имеются переменные данные (строки или файлы). Чтобы в сервере
создавать динамические массивы нужно сразу знать сколько придет и сами данные.
Пока это сделать не получается.
А через структуру, например:
type
send = record
size:Integer;
action:Byte;
data:Pointer;<-здесь могли бы висеть данные (указатели на строки или структуры или файлы), но так как они динамические я придумать пока ничего дополнительно не могу.
← →
clickmaker © (2007-08-20 10:13) [3]
> [2] Александр_К (20.08.07 10:06)
var s: send;
s.size := размер
s.data := AllocMem(s.size);
Move(данные, s.data^, s.size);
socket.SendBuf(s.data^, s.size);
← →
Александр_К (2007-08-20 10:54) [4]Что-то не получается:
С клиентской стороны пример:
type
PSend = ^TSend;
TSend = Record
dwData: WORD;
cbData: WORD;
lpData: Pointer;
end;
var
s:TSend;
procedure TForm1.Button1Click(Sender: TObject);
var
k:Integer;
ab:Integer;
begin
ab:=345;
s.cbData := Sizeof(ab);
s.dwData:=0;
s.lpData := AllocMem(s.cbData);
Move(ab, s.lpData^, s.cbData);
k:=Client.Socket.SendBuf(s.lpData^, s.cbData);
end;
Я взял ab на примере Integer, но могла быть строка и т.д.
Сервер должен получить ab = 345;
//функция получения данных
procedure ReceiveData(const Socket:Word);
var
s:TSend;
kk:Integer;
ss:Integer;
begin
kk:=WinSock.recv(Socket,s,s.cbData,0);
if kk <>0 then
begin
ss:=Integer(s.lpData^);
// Messagebox(0,PChar(inttostr(kk)),PChar(Inttostr(ss)),mb_ok);
end;
end;
Сервер ПОлучает всякую ерунду,а не k = 345.
← →
clickmaker © (2007-08-20 11:25) [5]
> kk:=WinSock.recv(Socket,s,s.cbData,0);
s.cbData не указано
← →
tio (2007-08-20 14:07) [6]а как одним проходом указать cbData?
Мне кажется не в этом дело, даже если будет указан cbData.
Пробовал ничего не получается.
← →
clickmaker © (2007-08-20 14:12) [7]
> [6] tio (20.08.07 14:07)
что значит одним проходом?
размер читаемой порции в функции recv - входной параметр, обязан быть
← →
Александр_К (2007-08-20 14:54) [8]Даже если поставить 2000-
Ничего не получится.
Пробробуйте сами.
← →
Германн © (2007-08-20 15:13) [9]
> Александр_К (20.08.07 09:17)
>
> Можно ли через сокет клиента передать указатель на
> структуру к сокету серверу,чтобы этот указатель остался
> актуальным и не была потеря данных.
>
Это что? Продолжение вчерашней бодяги
http://delphimaster.net/view/2-1187526516/ ?
Страницы: 1 вся ветка
Текущий архив: 2007.09.16;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.045 c