Главная страница
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.025 c
11-1169575891
Trible
2007-01-23 21:11
2007.09.16
Примитивные объекты: вопрос.


2-1187755040
Человек
2007-08-22 07:57
2007.09.16
Привязка к железу


11-1169551012
MTsv DN
2007-01-23 14:16
2007.09.16
Поменять LVItems с наименьшими временными затратами...


15-1187670626
Slider007
2007-08-21 08:30
2007.09.16
С днем рождения ! 21 августа 2007 вторник


15-1187298274
Petr V. Abramov
2007-08-17 01:04
2007.09.16
дайте урок англицкого