Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.29;
Скачать: CL | DM;

Вниз

Можно ли в поток добавить данные?   Найти похожие ветки 

 
sergeyst ©   (2007-06-26 13:28) [0]

Сабж.


 
Джо ©   (2007-06-26 13:29) [1]

Можно. И даже внезависимости от того что есть «поток» — stream или thread.


 
Lamer@fools.ua ©   (2007-06-26 13:30) [2]

> И даже внезависимости от того что есть «поток» — stream
> или thread.


... или поток сознания :-)


 
sergeyst ©   (2007-06-26 14:00) [3]

fs := TFileStream("aaa.txt", fmOpenRead);
Как добавить сюда строку?


 
Kerk ©   (2007-06-26 14:03) [4]

Узнаю брата Васю.. тьфу.. форум... процент даунов зашкаливает


 
wicked ©   (2007-06-26 14:05) [5]


> fs := TFileStream("aaa.txt", fmOpenRead);
> Как добавить сюда строку?

fs.Write(@s[1], Length(s))
пора уже в фак выносить


 
sergeyst ©   (2007-06-26 14:09) [6]


> Kerk ©   (26.06.07 14:03) [4]

злой ты


 
Сергей М. ©   (2007-06-26 14:27) [7]


> sergeyst ©   (26.06.07 14:00) [3]
>
> fs := TFileStream("aaa.txt", fmOpenRead);
> Как добавить сюда строку?


Никак.
Я тоже злой)


 
sergeyst ©   (2007-06-26 15:15) [8]


> Сергей М. ©   (26.06.07 14:27) [7]

> Никак. - это по злости или правда? А как же wicked ©   (26.06.07 14:05) [5] ?


 
homm ©   (2007-06-26 15:17) [9]

>
> > Никак. - это по злости или правда? А как же wicked ©  
> (26.06.07 14:05) [5] ?

Включи моск. Как ты добавить строку в файл, коотрый открыл для чтения?


 
sergeyst ©   (2007-06-26 15:26) [10]


> homm ©   (26.06.07 15:17) [9]

fmOpenRead


 
sergeyst ©   (2007-06-26 15:27) [11]

т.е. fmOpenReadWrite


 
Сергей М. ©   (2007-06-26 15:29) [12]


> sergeyst ©   (26.06.07 15:15) [8]
> > Никак. - это по злости или правда?


Это злая правда злой суровой жизни - нельзя курочить то что тебе не дозволено.


> А как же wicked


Он спросонья не увидел read


 
Сергей М. ©   (2007-06-26 15:30) [13]


> т.е. fmOpenReadWrite


Это же другой коленкор)


 
homm ©   (2007-06-26 15:34) [14]

> [11] sergeyst ©   (26.06.07 15:27)
> т.е. fmOpenReadWrite

Вот теперь правильно.


 
oldman ©   (2007-06-26 15:35) [15]


> sergeyst ©   (26.06.07 15:27) [11]


Так тебе в поток добавить или в файл записать???


 
P   (2007-06-26 15:37) [16]


procedure TForm1.Button1Click(Sender: TObject);
var
 f1: TFileStream;
 mystr: string;
begin
 if not FileExists(Myfile) then
   f1 := TFileStream.Create(Myfile, fmCreate or fmShareExclusive)
 else
   f1 := TFileStream.Create(Myfile, fmOpenReadWrite or fmShareExclusive);
 try
   mystr := "bu-ga-ga";
   f1.Write(mystr[1], length(mystr));

 finally
   f1.Free;
 end;
end;


 
Сергей М. ©   (2007-06-26 15:39) [17]


> oldman ©   (26.06.07 15:35) [15]


Ему по колено - он чатом каким-то озабочен)...
Непонятно с какой луны свалившиммся, но в котором якобы есть "строки" и "потоки")
Вот он и окучивает TFileStream, благо в названии класса есть что-то напоминающее вожделенный "поток")


 
Плохиш ©   (2007-06-26 15:41) [18]

Нифигасе, а я так и не понял, куда надо добавить строку... Велика и могуча руска языка...


 
sergeyst ©   (2007-06-26 15:42) [19]


> oldman ©   (26.06.07 15:35) [15]

В поток.
Ну вообще-то мне нужно узнать какой тип данных мне послали по чату. Вот я и хочу все данные пересылать SendStream, а там уже фильтровать.

> Сергей М. ©   (26.06.07 15:39) [17]

Не только им


 
Сергей М. ©   (2007-06-26 15:43) [20]


> sergeyst ©   (26.06.07 15:42) [19]


> Не только им


Было бы станным, если бы только им)


 
oldman ©   (2007-06-26 15:44) [21]


> Ну вообще-то мне нужно узнать какой тип данных мне послали
> по чату.


Тебе там можно N типов данных слать? Прямо вот в чате???


 
P   (2007-06-26 15:44) [22]


> sergeyst ©   (26.06.07 15:42) [19]


пиши протокол уровня приложения. Сперва узнай что такое OSI потом будешь уже писать чат.

http://www.citforum.ru/nets/switche/osi.shtml


 
Сергей М. ©   (2007-06-26 15:44) [23]


> вообще-то мне нужно узнать какой тип данных мне послали
> по чату.


Тебе же уже сказали - ищи и изучай ПИО этого чата !
В чем проблема-то ?


 
Сергей М. ©   (2007-06-26 15:47) [24]

Ноги растут отсюда:

http://delphimaster.net/view/2-1182836764/


 
sergeyst ©   (2007-06-26 15:47) [25]


> Сергей М. ©   (26.06.07 15:44) [23]

Не успел спросить что это такое.


 
Сергей М. ©   (2007-06-26 15:48) [26]

ПИО = Протокол Информационного Обмена.

Помогло ?


 
sergeyst ©   (2007-06-26 15:51) [27]


> Сергей М. ©   (26.06.07 15:48) [26]

Это совет сделать протокол самому?


 
homm ©   (2007-06-26 15:52) [28]

> [27] sergeyst ©   (26.06.07 15:51)

Ч есделать то? Тебе ясно написано, изучить.


 
Сергей М. ©   (2007-06-26 15:54) [29]


> sergeyst ©   (26.06.07 15:51) [27]
> Это совет сделать протокол самому?


Да.

Особенно - для чужого, уже существующего чата.

Долой дискриминацию, не позволяющую лезть со своим уставом в чужой монастырь !)


 
sergeyst ©   (2007-06-26 15:55) [30]


> homm ©   (26.06.07 15:52) [28]

P   (26.06.07 15:44) [22] - то, что находится по этой ссылке, я уже читал когда-то. Ну и как мне это знание может помочь?


 
Сергей М. ©   (2007-06-26 16:03) [31]


> sergeyst ©   (26.06.07 15:55) [30]


> как мне это знание может помочь?


тебе это может помочь хотя бы в части 7-го уровня.


 
sergeyst ©   (2007-06-26 16:14) [32]

Долой дискриминацию, не позволяющую лезть со своим уставом в чужой монастырь !) - Полностью поддерживаю. Вот, только, чат надо делать с 0. Какие примеры в сети ни нашел (в т.ч. на этом сайте) - пересылка файлов не работает.

> тебе это может помочь хотя бы в части 7-го уровня.

Ну и как ими мне пользоваться через TClientSocket/TServerSocket?


 
homm ©   (2007-06-26 16:17) [33]

> Долой дискриминацию, не позволяющую лезть со своим уставом
> в чужой монастырь !) - Полностью поддерживаю.

Невменяемый? Это вообще-то стеб был над тобой.


 
oldman ©   (2007-06-26 16:18) [34]


> Вот, только, чат надо делать с 0. Какие примеры в сети ни
> нашел (в т.ч. на этом сайте) - пересылка файлов не работает.
>


Каких файлов и куда?
имхо, не чат надо делать с 0...


 
Сергей М. ©   (2007-06-26 16:18) [35]


> sergeyst ©   (26.06.07 16:14) [32]


> чат надо делать с 0


Надо знач надо)

Почему бы не начать свою грустную историю именно с этой фразой ?

Твой предыдущий пост уже прикрыли фактически за отсутствии оной, а тебе все невдомек)

Ну нельзя же так тупить)..


> как ими мне пользоваться через TClientSocket/TServerSocket?


А что конкретно непонятно ?

Ты уже ПИО разработал ?

Если нет, то какого ляда взялся за компоненты ?

Выбор компонентов - этап, следующий ЗА разработкой ПИО !

Бельмес ?)


 
Kerk ©   (2007-06-26 16:22) [36]

На http://code.progler.ru/tags/Чат выбери себе любой


 
sergeyst ©   (2007-06-26 16:31) [37]


> Невменяемый?

 Вариант один?


 
sergeyst ©   (2007-06-26 16:35) [38]


> Сергей М. ©   (26.06.07 16:18) [35]

Я потому и спрашиваю, потому что не знаю за что там браться вначале и в конце.
>Kerk ©   (26.06.07 16:22) [36]
спасибо за ссылочку


 
P   (2007-06-26 16:37) [39]


> sergeyst ©   (26.06.07 16:31) [37]
>
>
> > Невменяемый?
>
>  Вариант один?


Разработай сперва App-протокол в виде набора команд передающихся по соединению

номер версии протокола(4 байта)|числовой идентификтор команды(4 байта)|размер данных команды(4 байта)|данные команды(размер данных команды)|


 
Сергей М. ©   (2007-06-26 16:38) [40]


> а что там браться


Где "там" ?

Ты свой ПИО  уже разработал ? Или взял на вооружениие чужой ?

Только - я тебя умоляю - не говори, что не понимаешь, что такое информационный обмен и что такое протокол (евойный в частности)


 
sergeyst ©   (2007-06-26 16:45) [41]

>Сергей М. ©   (26.06.07 16:38) [40]
Хорошо.
Это что P   (26.06.07 16:37) [39] сказал? Это не долга. А потом что ж, как получил команду на прием файла, то что?


 
Сергей М. ©   (2007-06-26 16:48) [42]


> то что?
>


Известно что - передать файл)


 
Mike Kouzmine ©   (2007-06-26 16:49) [43]

Сергей М. ©   (26.06.07 16:48) [42] Принять. Не путай.


 
sergeyst ©   (2007-06-26 16:50) [44]

>Известно что - передать файл)
Что мне говорить TClient/server?


 
Mike Kouzmine ©   (2007-06-26 16:53) [45]

sergeyst ©   (26.06.07 16:50) [44] Каждый говорит свое.


 
homm ©   (2007-06-26 16:53) [46]

> Что мне говорить TClient/server?

зум-зум? :)


 
Сергей М. ©   (2007-06-26 16:56) [47]


> Mike Kouzmine ©   (26.06.07 16:49) [43]
> Принять.


Прежде чем что-то принимать, надо уметь это "что-то" передать. И то и другое тесно связано с единым для приемника и передатчика ПИО. О нем как раз и речь идет, и им пока еще не пахнет)


> Что мне говорить TClient/server?
>


Тому кто передает говорить "SendЧЕГОТОТАМВСООТВЕТСТВИИСПИО", тому кто принимает - ""ReceiveЧЕГОТОТАМВСООТВЕТСТВИИСПИО""


 
Mike Kouzmine ©   (2007-06-26 17:03) [48]

Сергей М. ©   (26.06.07 16:56) [47] Автор хочет узнать об абстрактной модели, например, как реагировать на команду "принять файл" и что при этом говорить.


 
Сергей М. ©   (2007-06-26 17:11) [49]


> Mike Kouzmine ©   (26.06.07 17:03) [48]


> что при этом говорить


Кому говорить-то ?

Если передатчику, то он уже все сказал командой "принять файл", приемнику остается только молча исполнить команду)


 
Сергей М. ©   (2007-06-26 17:13) [50]

Предлагаю обсудить любой другой простейший ПИО, ну, скажем, на примере диалога покупателя с продавцом у пивного ларька).. Довольно показателен, кстати)


 
Mike Kouzmine ©   (2007-06-26 17:14) [51]

Сергей М. ©   (26.06.07 17:11) [49]
Ну, например, "сим-сим" - мол готов к приему!
Но, думаю, он имел ввиду вслух.


 
Плохиш ©   (2007-06-26 17:14) [52]


> Предлагаю обсудить любой другой простейший ПИО, ну, скажем,
>  на примере диалога покупателя с продавцом у пивного ларька

- Пива НЕТ!!!

и чё тут протоколировать? ;-)


 
Сергей М. ©   (2007-06-26 17:16) [53]


> мол готов к приему


Так это же и есть, по сути, команда "передай мне что-то там" !

И тот кто должен передать, вправе начать это делать немедленно, ибо принятая команда и есть факт готовности к приему.


 
Сергей М. ©   (2007-06-26 17:18) [54]


> Пива НЕТ!!!
>
> и чё тут протоколировать


Протокол подразумевает, что покупатель подойдя к пивному ларьку может молчать, ибо вариант с таким ходом диалога имеет право на существование)...


 
Плохиш ©   (2007-06-26 17:20) [55]

Покупатель притаранил PS/2 мышу, желая прикупить пыва для пятикласника, а ему продавец в рыло и "а нефиг мени мышами пугать..."


 
P   (2007-06-26 17:56) [56]


> sergeyst ©   (26.06.07 16:45) [41]
>
> >Сергей М. ©   (26.06.07 16:38) [40]
> Хорошо.
> Это что P   (26.06.07 16:37) [39] сказал? Это не долга.
> А потом что ж, как получил команду на прием файла, то что?
>


Отослать другую команду, называемую "файл", где в данных команды этот файл и сопутствующая информация типа названия и будет лежать.

А еще лучше разбить файла на части и отослать в нескольких командах, которые на стороне получателя будут собраны в один файл.


 
sergeyst ©   (2007-06-27 08:27) [57]

>P   (26.06.07 17:56) [56]
>Отослать другую команду, называемую "файл", где в данных команды этот >файл и сопутствующая информация типа названия и будет лежать.

>А еще лучше разбить файла на части и отослать в нескольких командах, >которые на стороне получателя будут собраны в один файл.

Вот это-то я и пытаюсь узнать(конкретно для TClientSocket/Server), а пыво в ларьке я знаю как купить.


 
Сергей М. ©   (2007-06-27 09:32) [58]


> конкретно для TClientSocket/Server


Опять ты за свое !
Ну причем здесь TClientSocket/Server ? На месте этих компонентов с тем же успехом могут быть использованы и любые другие подходящие. Задача компонентов транспортного уровня - организовать соединение и гонять туда-сюда некие неважно какие данные.

А вот какие конкретно данные (их тип, размер, прикладной смысл), в какой последовательности и в каком направлении "гонять" - вот с этим ты и должен определиться в первую очередь, и только потом браться за кодирование алгоритма.

Так бери карандаш с бумагой, садись и распиши этот ПИО в деталях !


 
sergeyst ©   (2007-06-27 10:04) [59]


> Сергей М. ©   (27.06.07 09:32) [58]

Слухаюсь!

#HiAll - вход в систему, отсылается всем
#HiSle - ответ на приветствие
#Talki - принять текст
#CauFi - принять файл
#FuAll - вышел

Это я должен сделать в первую очередь?


 
Сергей М. ©   (2007-06-27 10:37) [60]

Ну вот, уже что-то)

Теперь более подробно:


> #HiAll - вход в систему, отсылается всем


#HiAll - это, константа ? Какая - строковая или числовая ? Размер ?
Кем отсылается ?


 
sergeyst ©   (2007-06-27 10:51) [61]

#HiAll + " " + UserNick
#HiSle + " " + UserNick
#Talki + " " + redtSend.Text
#FuAll + " " + UserNick
#CauFi + " " + FileName - вот, а тут-то что дальше?


 
sergeyst ©   (2007-06-27 11:11) [62]

>#HiAll - #HiAll - это, константа ? Какая - строковая или числовая ? Размер ?
>Кем отсылается ?
константа, строковая, SizeOf


 
homm ©   (2007-06-27 11:15) [63]

> [62] sergeyst ©   (27.06.07 11:11)

Не SizeOf, а до первого пробела, судя по тому что ты написал.


 
Сергей М. ©   (2007-06-27 11:15) [64]

Кем отсылается ?


 
Сергей М. ©   (2007-06-27 11:20) [65]


> sergeyst


Ты вообще какой чат пытаешься слепить - децентрализованный или в выделенным чат-сервером (серверами) ?

Это же важно ! С этого и начинать надо)


 
sergeyst ©   (2007-06-27 11:25) [66]


> homm ©   (27.06.07 11:15) [63]

Не знаю зачем нужен размер, но ест-но, что до пробела.
>Кем?  
UserNick нужен или Host?
Host, вроде, тут: Socket.RemoteHost или, если прием будет происходить не в обработчиках Client/Server, то при отправке: Socket.LocalHost


 
sergeyst ©   (2007-06-27 11:27) [67]


> Сергей М. ©   (27.06.07 11:20) [65]

Скорее децентрализованный (если я правильно понял) .


 
homm ©   (2007-06-27 11:30) [68]

Может хватит уже мучить себя и других? Взгляни уже сюда
> [36] Kerk ©   (26.06.07 16:22)


 
Сергей М. ©   (2007-06-27 11:31) [69]


> UserNick нужен или Host?


Причем здесь это ?

Кто кому отсылает это самое HiAll - клиент серверу или клиент всем прочим клиентам сервера ?


 
Сергей М. ©   (2007-06-27 11:33) [70]


> sergeyst ©   (27.06.07 11:27) [67]
>
>
> > Сергей М. ©   (27.06.07 11:20) [65]
>
> Скорее децентрализованный


И как же клиенты твоего чата будут находить друг-друга ?


 
sergeyst ©   (2007-06-27 11:39) [71]

>Кто кому отсылает это самое HiAll - клиент серверу или клиент всем >прочим клиентам сервера ?
М-да... Пожалуй, соглашусь с homm ©   (27.06.07 11:30) [68]. Всем спасибо.


 
sergeyst ©   (2007-06-27 11:43) [72]

>И как же клиенты твоего чата будут находить друг-друга ?
Э-э-э... idUDP


 
Сергей М. ©   (2007-06-27 11:53) [73]


> sergeyst ©   (27.06.07 11:43) [72]


Так ведь и для этого тоже ПИО требуется разработать !
С этого и начинай)

Кстати, а накой ляд тогда TClient/ServerSocket"ы нужны ?
Ну и сотворяй все на основе UDP ! Зачем эта солянка сборная из UDP+TCP нужна ? Ты сам-то себе можешь дать разумное объяснение такой необходимости ?

А даже если и есть такая необходимость, ты осознаешь, что успешная работа твоего чата в условиях глоб.сети невозможна ?


 
sergeyst ©   (2007-06-27 11:59) [74]


> Сергей М. ©   (27.06.07 11:53) [73]

Солянка, конечно, лишнее, мягко говоря. Просто мне показалось, что войти лучше по UDP, а пересылать файлы по TCP(то бишь проще).


 
Сергей М. ©   (2007-06-27 12:05) [75]


> войти лучше по UDP


Куда "войти"-то ?
У тебя же нет центрального чат-сервера)


 
sergeyst ©   (2007-06-27 12:17) [76]


> Куда "войти"-то ?

Этот чат будет частью проги, работающей с БД. Вот "войти" - значить пользователь запустил эту самую прогу и готов к общению( есть(будут) два типа сообщений: простой разговор - нет пользователя, нет и разговора и служебные сообщения, которые(только служебные), в случае недоступности пользователя, будут сохраняться в БД, а когда он включится, то ему сообщ. типа табе тама малява). Можно пересылать файлы через БД, но не хочется. Просто не хочется.


 
homm ©   (2007-06-27 12:21) [77]

> Можно пересылать файлы через БД, но не хочется

Лучше архивы прогрессбаром распаковывать ;)


 
Сергей М. ©   (2007-06-27 12:24) [78]


> "войти" - значить пользователь запустил эту самую прогу
> и готов к общению


Прелюбопытное определение)

Но причем здесь пользователь, если речь идет об алгоритме программы как таковой ?


 
sergeyst ©   (2007-06-27 13:19) [79]


> Сергей М. ©   (27.06.07 12:24) [78]

Ну какой алгоритм? Я просто не знаю как принять поток из сокета. И передать тоже. Edit.Text := "sdfg"; - Вот этого я не знаю, в переносе на сокеты.


> homm ©   (27.06.07 12:21) [77]

А где сообщ. хранить?

ЗЫ.Кому нравится околокружие?


 
Anatoly Podgoretsky ©   (2007-06-27 13:27) [80]

> sergeyst  (27.06.2007 12:17:16)  [76]

Вряд ли этот чат будет.


 
clickmaker ©   (2007-06-27 13:31) [81]


> [79] sergeyst ©   (27.06.07 13:19)

заведи рекорд
type TChatMessage = packed record
 From: array[0..50] of char;
 To: array[0..50] of char;
 MessageSize: integer;
 DateSent: TDateTime;
end;
это шапка сообщения
в MessageSize - Length(Edit.Text) к примеру - длина сообщения
Записывай в сокет (или по UDP) сначала этот заголовок, потом сам текст.
На приемной стороне читаешь заголовок, смотришь MessageSize и читаешь столько байт из сокета


 
Сергей М. ©   (2007-06-27 13:51) [82]


> не знаю как принять поток из сокета


Чтобы принять поток, нужно знать его размер.
А метод SendStream не передает инф-цию о размере потока.
Значит эту инф-цию нужно передать "ручками", до вызова SendStream.
Тогда принимающая сторона, ожидающая поток, должна принять сначала эту инф-цию, и уж на основании ее посредством одного или более вызовов метода ReceiveBuf принять собственно данные, переданные в контексте ожидаемого потока


 
sergeyst ©   (2007-06-27 13:53) [83]


> clickmaker ©   (27.06.07 13:31) [81]

А пакеты IdUDP сам собирает?
А если есть сообщения одновременно от нескольких пользователей?

> Anatoly Podgoretsky ©   (27.06.07 13:27) [80]

Почему?
Как сделаю, обязательно сообщу. Каким-нибудь вопросиком.


 
sergeyst ©   (2007-06-27 13:57) [84]


> Сергей М. ©   (27.06.07 13:51) [82]


> одного или более вызовов метода ReceiveBuf принять собственно
> данные

Как потом собрать?


 
Сергей М. ©   (2007-06-27 14:09) [85]


> Как потом собрать?


Записать в стрим-объект, последовательно в порядке поступления.


 
sergeyst ©   (2007-06-27 14:19) [86]


> Записать в стрим-объект, последовательно в порядке поступления.

М-м-м... Насколько я знаю, UDP-пакеты могут приходить в любой последовательности. Или это совет для TCP?


 
P   (2007-06-27 18:13) [87]


> sergeyst ©   (27.06.07 14:19) [86]


По части только приема-передачи файла это уже 5 команд

1. Запрос на получение файла
2. Ответ с информацией о файле, его сеансовом-id, частях, имени и пр.
3. Ответ в виде id части файла, смещения и размера части файла
4. Ответ в виде закрытия передачи файла определённого ID.
5. Запрос на прекращение передачи частей файла.


 
Сергей М. ©   (2007-06-28 08:20) [88]


> sergeyst ©   (27.06.07 14:19) [86]


> Или это совет для TCP?
>


Ну ты же речь-то завел о TServer/ClientSocket ? Так о каком же UDP ты рассуждаешь, если эти компоненты используют TCP ?



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

Текущий архив: 2007.07.29;
Скачать: CL | DM;

Наверх




Память: 0.7 MB
Время: 0.026 c
15-1182946542
de.
2007-06-27 16:15
2007.07.29
RxLib


2-1183582802
snowkam
2007-07-05 01:00
2007.07.29
баннер


15-1183450467
Начинающий программист
2007-07-03 12:14
2007.07.29
Книга по Delphi


2-1183404561
ilya_ae
2007-07-02 23:29
2007.07.29
insertSql


15-1183371286
P
2007-07-02 14:14
2007.07.29
Программист, проектирующий довольно уникальную систему, он -