Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.16;
Скачать: [xml.tar.bz2];

Вниз

Сокеты   Найти похожие ветки 

 
Александр_К   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.067 c
2-1187699429
Dmitriy507
2007-08-21 16:30
2007.09.16
проблема с cmd.exe


2-1187870422
harisma
2007-08-23 16:00
2007.09.16
Зависает компиллятор


2-1187766089
stanislav
2007-08-22 11:01
2007.09.16
Integer to widechar


11-1170010850
gok5
2007-01-28 22:00
2007.09.16
How to convert this screenshot function ?


15-1187317150
Slider007
2007-08-17 06:19
2007.09.16
С днем рождения ! 17 августа 2007 пятница





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский