![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отправить при помощи "ServerSocket" Переменную типа массив? [D7, WinXP]
Galiaf © (2005-04-26 22:33:00)Переменная A:array[0..10] of string, необходимо послать клиенту всё содержимое этой пераменной. Кто знает, поделитесь
atruhin (2005-04-29 11:19:00) [1]Ну так до июля и отложим :)
kami (2005-04-28 22:03:00) [2]Сознаю свою вину, меру, степень, глубину
И прошу меня направить на текущую войну
Нет войны - я все приму -
Ссылку, каторгу, тюрьму...
Но желательно в июле
И желательно - в Крыму.
:)
(с)Леонид Филатов. Про Федота-стрельца
atruhin (2005-04-28 13:07:00) [3]>>kami © (27.04.05 00:33) [1]
>> Но так неправильно,
Так точно не правильно так как ты оправил только указатели на строки.
atruhin (2005-04-28 13:07:00) [4]>>kami © (27.04.05 00:33) [1]
>> Но так неправильно,
Так точно не правильно так как ты оправил только указатели на строки.
Digitman (2005-04-27 08:14:00) [5]
> Galiaf (26.04.05 22:33)
в цикле от 0 до 10 посылаешь сначала длину i-й строки, следом - собственно стр.данные i-й строки
можно поступить и еще смешнее - загрузить свой массив в StringList, затем прочитать в стр.переменную s св-во StringList.Lines.Text, далее послать длину s и следом собственно буфер s
kami (2005-04-27 00:33:00) [6]Проще всего так:
(s,s1:array[0..10] of string)
На сервере:
procedure TForm1.Button1Click(Sender: TObject);
var
ms:TMemoryStream;
begin
ms:=TMemoryStream.Create;
ms.Write(s,SizeOf(s));
ms.Seek(0,soFromBeginning);
ServerSocket.Socket.Connections[0].SendStream(ms);
end;
На клиенте:
procedure TForm1.ClientSocketRead(Sender: TObject;Socket:TCustomWinSocket);
begin
Socket.ReceiveBuf(s1,Socket.ReceiveLength);
end;
Но так неправильно, пересылка массива может разбиться по пакетам, да и сам массив может не влезть в один пакет. Я бы пересылал в первую очередь размер массива (sizeof), а потом - сам массив.
На приемной стороне использовал бы тот же ReceiveBuf, но дописывал в созданный при приеме первого пакета поток, контролируя оставшуюся длину. После приема всех данных - записать из потока в массив.