Вниз
Скачать: CL | DM;

Передача массива по сети   Найти похожие ветки 

 
Sp1r1t   (2007-02-23 15:40) [0]

Подскажите плс как по сети передать массив?


 
alexm_hs ©   (2007-02-23 17:03) [1]

поищите пример отправки  TCP пакета через сокеты. Там используется функция
 SendTo(Sock, Data, DataBytes, 0, Target, SizeOf(Target));

Как раз в качестве Data можно подсунуть array of.... Либо PChar и т.д. А на принимаемом хосте слушать установленный порт. Примеров тоже предостаточно.  Ищите по ключевым словам socket, PF_INET, SendTo, TSockAddrIn т.д.


 
alexm_hs ©   (2007-02-23 17:04) [2]

Хотя мужно и не мудрить с сокетами а взять готовые компоненты Indy: TidTCPClient @ TidTCPServer


 
Sp1r1t   (2007-02-24 16:00) [3]

я использую компоненты Indy. Строку например передавать легко - WriteLn,Readln. А как мне передать масив? - какие методы нужно использовать?


 
Alexey (AZ)   (2007-02-24 16:23) [4]

SendBuf/SendStream или как там их... Можете даже в string загнать ваш массив и толкнуть, т.к. в делфи string не то же самое что Null-Terminated string в понимании ВиндовозАПИ.
Принять - ReadLn, ReadBuf, etc.


 
Sp1r1t   (2007-02-24 20:54) [5]

Напишите хоть какойто пример плс ктонибудб для передачи массива или записи по сети с помощью Инди компонентов


 
Alexey (AZ)   (2007-02-25 11:00) [6]


> я использую компоненты Indy. Строку например передавать
> легко - WriteLn,Readln. А как мне передать масив? - какие
> методы нужно использовать?

В моих инди к сожалению нет WriteLn и ReadLn, или я плохо искал. Вот так получилось передать массив у меня при помощи Индейского ТЦП клиента.

procedure TForm1.Button1Click(Sender: TObject);
const
 ar : array[0..5] of char = ("A","B","C",#39,#00,"B");
var
 t : TMemoryStream;
begin
 try
   t := TMemoryStream.Create;
   t.Write(ar[0],sizeof(ar));
   t.Position := 0;
   IdTCPClient1.Connect();
   IdTCPClient1.WriteStream(
     t,false,false,t.Size
   );
   IdTCPClient1.Disconnect;
 finally
   t.Free;
 end;
end;


 
Sp1r1t   (2007-02-25 18:33) [7]

У меня наоборот - СЕРВЕР пишет в Stream:

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
const ar : array[0..5] of char = ("A","B","C",#39,#00,"B");
var    t:TMemoryStream;
begin
try
  t := TMemoryStream.Create;
  t.Write(ar[0],sizeof(ar));
  t.Position := 0;
  Athread.Connection.WriteStream(t,false,false);
  //t.Size - пишет что лишний параметр
  AThread.Connection.Disconnect;
finally
  t.Free;
end;

Проблема: Не пойму как читать из Stream. И почему процедуры
WriteStream(Tstream,Boolean,Boolean) отличается от
ReadStream(TStream,AbyteCount:LongInt,Boolean) - во Write не надо указывать к-во отсылаемых байт а в Read - надо.

Если можете, напишите плс как прочесть из Stream этот массив и запихнуть его в переменную ar.

procedure TForm1.Button1Click(Sender: TObject);
var
t : TMemoryStream;
 ar : array [0..5] of char;
begin
try
  t := TMemoryStream.Create;
  t.Position := 0;
  Client.Connect;
  Client.ReadStream(t,t.Size,false);
  Client.Disconnect;
finally
  t.Free;
end;


 
Sp1r1t   (2007-02-25 18:37) [8]

и еще вопрос t.Write(ar[0],sizeof(ar)); - передача 1-го эл-та массива в поток. Как передать все элементы? Может вопрос туповатый )) - я просто не совсем понимаю принцип работы TStream - если есть ссылочка дайте плс.


 
Alexey (AZ)   (2007-02-25 18:55) [9]

Это не передача первого элемента, это так мы указываем с какого места надо начинать передачу. Это можно и не указывать.


> Если можете, напишите плс как прочесть из Stream этот массив
> и запихнуть его в переменную ar.
>

stream.position := 0;
stream.Read(ar,ReadSize);



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.019 c
6-1171959552
santey
2007-02-20 11:19
2007.10.21
Как установить статический ип на сетевом адаптере


2-1190532007
San1712
2007-09-23 11:20
2007.10.21
Как записать в реестр параметр типа REG_DWORD ?


2-1190800377
O.O
2007-09-26 13:52
2007.10.21
Как удалить файл с атрибутом "только для чтения"


6-1171203227
Grol
2007-02-11 17:13
2007.10.21
Узнать инфу о компах в сети!


2-1190954902
fend
2007-09-28 08:48
2007.10.21
Длина строковой переменной




   Наверх