Форум: "Прочее";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];
ВнизМожно ли в поток добавить данные? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.67 MB
Время: 0.043 c