|
Вопрос # 4 578/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Как передать строки по сети? Пробую так, поле edit3 остается пустым (.
Приложение: Переключить в обычный режим- procedure TForm1.Button1Click(Sender: TObject);
- var
- MyStream: TMemoryStream;
- s: String[2];
- begin
- edit1.Text:=IDIPWatch1.LocalIP; //
ëîêàëüíûé IP
àäðåññ
- MyStream := TMemoryStream.Create; //
Ñîçäàíèå
êëàññà
- NMStrm1.Port := 6711; //
Çíà÷åíèå
ïîðòà
ïîëó÷àòåëÿ
- NMStrm1.TimeOut := 3000; //
Çàäåðæêà
ïðè
ïîäêëþ÷åíèè
(TimeOut)
- NMStrm1.Host := edit1.Text; // IP-Àäðåññ
ïîëó÷àòåëÿ
- NMStrm1.FromName := 'Êëèåíò';
- s:=edit2.text;
- MyStream.Write(s,3); // Èìÿ
îòïðàâèòåëÿ
- NMStrm1.PostIt(MyStream); //
Îòïðàâêà
äàííûõ
- MyStream.Free; //
Îñâîáîæäåíèå
ïàìÿòè
- end;
-
-
- procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
- strm: TStream);
- var
- MyStream: TMemoryStream;
- s: String[2];
- begin
- MyStream := TMemoryStream.Create;
- MyStream.Position:=0;
- MyStream.Read(s,3);
- edit3.Text:=s;
- end;
Ответ #1. Отвечает эксперт: DNK
Здравствуйте, Казаков Николай Константинович!
Во-первых: Вы создали пустой поток памяти и пытаетесь из него что-то прочитать.
Отсюда второй момент: Если бы вы проверили, что вернула функция Read, то там наверняка было бы 0.
В третьих: плохой тон работать методами Read и Write со строками. Для этого в качестве буфера чтения записи лучше использовать TStringStream.
buf := TStringStream.Create('');
try
MyStream.Position := 0;
if buf.CopyFrom(MyStream, 3) = 3 then // Проверяем всё ли прочиталось
edit3.Text:=buf.DataString
else
MessageDlg('Ошибка чтения', mtError, [mbOk], 0);
finally
buf.Free;
end;
 |
Ответ отправил: DNK (статус: Студент)
Время отправки: 14 сентября 2010, 15:20
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 14 сентября 2010, 20:31; участников в обсуждении: 2.
|
Казаков Николай Константинович (статус: 1-ый класс), 14 сентября 2010, 16:02 [#1]:
а записывать строку в поток нужно через WriteString? Что то не получается так, когда записываю строку с использованием
MyStream.Write(s,3); вроде получается. Но тогда не логично как-то записваем TMemoryStream, а считываем TStringStream почему?
|
14 сентября 2010, 17:37: Вопрос перемещён из тематического раздела Delphi » Алгоритмы, преобразования в раздел Delphi » Работа с сетями и протоколами модератором Ерёмин А.А.
|
DNK (статус: Студент), 14 сентября 2010, 20:31 [#2]:
Цитата (Казаков Николай Константинович):
а записывать строку в поток нужно через WriteString? Что то не получается так И я кажется догадываюсь почему... Только подтвердите мою догадку.
"Digital Networked Knight"
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|