Главная страница
    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.46 MB
Время: 0.061 c
6-1172044540
jiny
2007-02-21 10:55
2007.10.21
Как подкл. ч-з TCPClient, отправить строку "GET" и пол.ответ ?


2-1190903883
F@T@L_Err0r
2007-09-27 18:38
2007.10.21
пуск +D


10-1138545805
АлександрМ
2006-01-29 17:43
2007.10.21
Параграфы и таблицы в Word


15-1190181663
oldman
2007-09-19 10:01
2007.10.21
Все программисты знают, что компьютер - железный глупый ящик


1-1186230262
TStas
2007-08-04 16:24
2007.10.21
Где в реестре адрес автономной страницы браузера? (IE)





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