![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| BSOD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 1.11.2004 Где: Гомель Репутация: нет Всего: 3 |
поиском не нашел...
как передать файл (поток) при помощи idUDPClient и Server ??? Это сообщение отредактировал(а) BSOD - 15.2.2006, 23:11 -------------------- как корабль назовешь - то на нем и напишешь |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 5 Всего: 98 |
http://forum.vingrad.ru/index.php?showtopic=2359
там есть пример UDP чата. файл передавать не намного сложнее. -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| BSOD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 1.11.2004 Где: Гомель Репутация: нет Всего: 3 |
тоесть файл передавать как текст?
(текст-то я умею =)) -------------------- как корабль назовешь - то на нем и напишешь |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 5 Всего: 98 |
должен и в бинарном виде уйти...
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| BSOD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 1.11.2004 Где: Гомель Репутация: нет Всего: 3 |
всмысле
просто, допустим у serverSocket и ClientSocket есть такая штука, как socket.sendstream.. что довольно удобно, так вот я и спрашиваю, нет ли в индейцах чего таково? -------------------- как корабль назовешь - то на нем и напишешь |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Там есть SendBuf. Работает по аналогии, только не со стримом, а с блоком данных.
|
|||
|
||||
| BSOD |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 1.11.2004 Где: Гомель Репутация: нет Всего: 3 |
Вобщем, небольшая проблемка....
хочу передать скрин. с одной стороны по таймеру делаю:
с другой стороны: у одного сервера onUDPread:
у другово:
тоесть, сначала посылаю "beg", с другой стороны очищаю поток. потом - по одному байту шлю весь поток потом - шлю "end" и пытаюсь из принятого потока сделать JPG так вот поток этот доходит уже совсем не таким, каким он был в начале, и при попытке перегнать его в jpg=>bmp - вылазит еррор, что типа jp - на самом деле не рисунок.... хотя, один раз он все-таки передался..... что я делаю не так и что мне делать? -------------------- как корабль назовешь - то на нем и напишешь |
||||||
|
|||||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
UDP нельзя слать по одному байту. Это неконтролируемый протокол. Байти могут придти в совершенно произвольном порядке.
Шли блоками по 60кб. |
|||
|
||||
| BSOD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 1.11.2004 Где: Гомель Репутация: нет Всего: 3 |
а по подробнее, как сие реализовать?
-------------------- как корабль назовешь - то на нем и напишешь |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Все также. Только отправляй не однобайтовый буфер, а используй буфер, большим размером.
Тут просто есть ограничение - ты не можешь за один раз отправить более 64 килобайт. А реально даже меньше. 60 вполне подойдет. Но отправлять по 1 байту нельзя - UDP не сохраняет порядок в отличии от TCP. Или используй TCP, или отправляй большими кусками - пока будешь отправлять новый кусок, старый уже дойдет. Принцип отправки все тот же. Отличие лишь в том, что ты должен переписать часть данных в созданный буфер, отправить,переписать следующую часть и т.д. В принципе то же самое, только используешь не 1байтовую переменную, а массив байтов. |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 3 Всего: 50 |
Думаю, что правильнее будет подход с идентификацией(нумерацией) каждого пакета на передающей стороне и "склеиванием" в соответствующем порядке на принимающей стороне. При этом еще необходимо реализовывать обработку ситуации с непринятыми и искаженными пакетами. В общем, это написание полноценного протокола обмена. -------------------- |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Проще будет с TCP. UDP вещь сложная и имеет много ньюансов.
Но справиться с ней можно... сломав пару десятков граблей. |
|||
|
||||
| BSOD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 1.11.2004 Где: Гомель Репутация: нет Всего: 3 |
вроде заработало, но как-то через раз... нужно будет еще не тока на себе потестить...
-------------------- как корабль назовешь - то на нем и напишешь |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Ну так UDP и не является надежным протоколом.
Если что-то в пути потерялось, то картинку уже не соберешь. А оно может теряться, перемешиваться... Особенно на линиях плохого качества. Работает по принципу - кинул в сеть и забыл. А хочешь надежности и гарантированной доставки - это уже TCP. |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 3 Всего: 50 |
Непонятно, почему UDP.
UDP имеет смысл использовать для передачи от сервера клиентам, как мне кажется, причем только в том случае, если потеря части данных некритична. Например, потоковая широковещательная трансляция видео по локальной сети, когда потеря пары кадров совершенно некритична. Если уж использовать передачу на сервер - прямойсмысл использовать все преимущества TCP. -------------------- |
|||
|
||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |