Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.028 c
2-1188151129
hprx
2007-08-26 21:58
2007.09.16
ListBox


15-1187354276
_andrews_
2007-08-17 16:37
2007.09.16
Установить компоненты FastScript под .NET


2-1187936938
cantalia
2007-08-24 10:28
2007.09.16
Преобразование XSD в XML


15-1187695864
ZeroDivide
2007-08-21 15:31
2007.09.16
Delphi -> BDS -> RS


2-1188129926
nord489
2007-08-26 16:05
2007.09.16
Свойства Формы