LINUX.ORG.RU

Sockets: как коннектить два компа через сервер, типа как делает TeamViewer?

 


0

2

Я в сокетах разбираюсь на уровне знаю как установить listen и как к нему подключиться.

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

Это сложно делать?

Это сложно делать?

нет.

хотя озвучте полное ТЗ, и желательно в Job :-)

MKuznetsov ★★★★★
()

Если ты про «введите число, которое высветилось на удаленном экране», то не сложно. Один подключается и говорит «я жду», ему обратно выдается уникальное число, и сокет висит открытым. Другой подключается и говорит «вот число», сервер тот сокет замыкает на этот в отдельном треде/процессе, число забывается. После такого хендшейка общаются, как если бы был прямой коннект.

anonymous
()

Это сложно делать?

Как всегда - игрушечную реализацию сделать несложно.

В простейшем случае реализация примерно такая:

шаг 1: два клиента подключаются к серверу, каким-либо образом сообщают о своем намерении обмениваться данными

шаг 2: сервер пересылает данными между клиентами (т.е., все, что пришло от клиента 1, отправляет клиенту 2; и наоборот).

dmitry_vk ★★★
()

есть такая приблуда - STUN. по сути прокалывание NAT с удержанием отображения внешенго UDP порта на внутренний. тебе нужен сервер STUN, который будет принимать UDP пакет с паролем, и айдишником сети. возвращать должен не только обратный адрес, но адреса всех кто постучался с правильным паролем. но это только UDP

ckotinko ☆☆☆
()

Самый просто случай реализуется через netcat.

true_admin ★★★★★
()

В самом простейшем варианте - тебе нужно сделать «ретранслятор». То есть клиент подключается сокетом к серверу, у сервера на каждое входящее соединение создаётся сокет при accept. Ну и дальше сервер уже перенаправляет между клиентами данные. Как ты будешь идентифицировать клиентов между собой (в плане клиент должен узнать о другом клиенте по какому-то идентификатору) - дело уже лично твоего протокола.

Если усложнить задачу, то ты придёшь к собственной реализации stun, что не имеет смысла, проще взять готовое. Задача stun и подобных протоколов - обеспечить связь клиент-клиент напрямую, без участия сервера, как ретранслятора. Сервер лишь указывает клиентам их прямые параметры (ip-port) для инициализации соединения, а данные гоняются уже по этому соединению.

В сухом остатке - ретранслятор будет работать при любых комбинациях NAT на клиентской стороне, но нагружает сам ретранслятор. А варианты с nat-traversal протоколами позволяют именно разгрузить ретранслятор.

nickleiten ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.