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

Вниз

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

 
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 вся ветка

Форум: "Сети";
Текущий архив: 2007.10.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.043 c
2-1190619226
YakovlevAP
2007-09-24 11:33
2007.10.21
Как сделать прогу типа ASTER ?


2-1191146809
SveTTT
2007-09-30 14:06
2007.10.21
TButton не меняет цвет шрифта


2-1190906832
hinst
2007-09-27 19:27
2007.10.21
Прямоугольник текста


15-1190108510
Empleado
2007-09-18 13:41
2007.10.21
Порекомендуйте Линух или подобную OS


2-1191266458
Gringoire
2007-10-01 23:20
2007.10.21
Ctrl + V





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