2010-09-14 2 views
0

Я ищу простой способ реализовать этот сценарий:Файл/Передача данных между двумя произвольными источниками

Скажем, у меня есть две машины, с которыми я хотел бы делиться данными между ними. Расположение/адреса этих машин могут меняться в любое время. Я бы хотел, чтобы обе машины зарегистрировались на центральном сервере, чтобы сообщить об их доступности. Одна из двух систем хочет вытащить файл из другого. Я знаю, что у меня может быть система раковины сделать запрос на сервер, который затем запрашивает файл из источника, вытаскивает его, а затем передает его запрашивающему. Однако это кажется неэффективным с точки зрения пропускной способности. Файл будет перенесен дважды. Есть ли система, где источник может транслировать ее прямо в раковину?

Не имея возможности гарантировать такие функции, как переадресация портов, если система находится за брандмауэром и т. Д. Я не знаю способа.

Спасибо.

+0

Вы изучали системы P2P, такие как BitTorrent? Кажется несколько похожим на меня. –

+0

Похоже, что BitTorrent использует обратные соединения. – dwelch

ответ

2

Когда машина A хочет отправить данные на машину B, A отправляет запрос на центральный сервер C. C спрашивает B для разрешения. Если принято, C дает IP-адрес B и порт A. A пытается напрямую подключиться к B. Если неуспешно (т. Е. Если B находится за маршрутизатором/брандмауэром), то A уведомляет об ошибке C. Затем C передает IP-адрес A и порт B. B пытается напрямую подключиться к A (который должен иметь возможность проходить через брандмауэр/маршрутизатор B). Если соединение выполнено успешно, то A имеет прямое соединение для отправки данных на B. Если оба соединения не увенчались успехом (то есть, если A также находится за брандмауэром/маршрутизатором), то C должен действовать как прокси-сервер для всех передач между A и B.

+0

Это прекрасный ответ –

Смежные вопросы