nesco писал(а):
А тебе не кажется, что размер памяти ограничивает размер передаваемого файла?- во-первых, идет отправка только из st.Memory, следовательно поддерживается только MemoryStream;
- во-вторых, весь объем отправляется за раз, а в TSocket.Send нет разбиения на меньшие порции. Это приводит к тому, что если MemoryStream и может иметь размер несколько сотен Мб, то передать можно не больше нескольких мегабайт (или десятков Мб) - у сокета есть свой буфер, переполнение которого даст ошибку отправки.
Assasin писал(а):
предоставляли пользователю по нижней точки безразмерный поток данных (Stream), с которым уже можно работать с помощью StreamRW- полностью "асинхронный" режим, когда ожидание и отправка данных "независимы", как сделано у нас благодаря событию onRead. Удобно применять в программах типа чатов, которые держат постоянное соединение, чтобы получать уведомления с серверов.
- "диалоговый" режим, когда программа работает в режиме запрос-ответ: одна сторона отправляет данные, затем переключается в ожидание ответа. И принятые данные будут интерпретированы в зависимости от последней посланной команды. Так работают протоколы типа HTTP, FTP, SMTP. Вот этот режим удобно реализовать компонентом SocketRW.
Если же приём будет вестись, как у нас, через событие onRead, то компонент SocketRW можно будет применять только для отправки данных.
Assasin писал(а):
я использую что-то типа самопального протоколаdoSendString
doSendStringAsync
doSendFile
doSendFileAsync
doSendStream
doSendStreamAsync
doAbortSend
doRejectRecv
onSend
onSendAborted - передача отменена другой стороной
onBeforeString - будет принята строка. Точка Length Содержит длину строки. Можно отказаться от приема через doRejectRecv
onBeforeFile - аналогично onBeforeString, можно указать имя для сохранения. Можно предусмотреть получение оригинального имени.
onBeforeStream - аналогично onBeforeString
onString - выдаёт принятую строку
onFile - происходит после получения файла
onStream
onErrorSend
onErrorProto - неправильные ответы другой стороны
Данные:
Stream - поток, куда будет записан принятый поток.
OutFileName - имя файла для сохранения.
Свойства:
Length - длина принимаемых данных
doSendStringAsync
doSendFile
doSendFileAsync
doSendStream
doSendStreamAsync
doAbortSend
doRejectRecv
onSend
onSendAborted - передача отменена другой стороной
onBeforeString - будет принята строка. Точка Length Содержит длину строки. Можно отказаться от приема через doRejectRecv
onBeforeFile - аналогично onBeforeString, можно указать имя для сохранения. Можно предусмотреть получение оригинального имени.
onBeforeStream - аналогично onBeforeString
onString - выдаёт принятую строку
onFile - происходит после получения файла
onStream
onErrorSend
onErrorProto - неправильные ответы другой стороны
Данные:
Stream - поток, куда будет записан принятый поток.
OutFileName - имя файла для сохранения.
Свойства:
Length - длина принимаемых данных
Assasin писал(а):
Это получается, что если мы принимаем integer или realAssasin писал(а):
если нам придет больше одного значения за раз, то остальные мы потеряемwhile count > 0 do
begin
end;
begin
end;



Поиск
Друзья
Администрация