Главная страница
    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.054 c
2-1187769142
alshtam
2007-08-22 11:52
2007.09.16
простой программы


2-1187609682
R.O.O.T
2007-08-20 15:34
2007.09.16
Вопрос!!!


3-1179321528
DmitrichJ
2007-05-16 17:18
2007.09.16
Access. Работа с таблицами $


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


11-1170007808
fender
2007-01-28 21:10
2007.09.16
SpriteUtils2 2.08b





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский