Одноранговая связь через сокет без переадресации портовPython

Программы на Python
Ответить
Anonymous
 Одноранговая связь через сокет без переадресации портов

Сообщение Anonymous »

Прежде всего, я не говорю о TCP, UDP или сокете, реализованном в VPS или сервере.
Мой вопрос аналогичен сокету между клиентом и клиентом. общение.
Представьте, что вы слушаете музыку на своем домашнем компьютере с разъемом TCP. В любом случае вы можете подключиться к этому из домашней сети. Но предположим, что кто-то хочет подключиться к нему через Интернет. Дальше можно создать на роутере правило переадресации и привести его в рабочее состояние. Тогда маршрутизатор знает, что если входящее соединение исходит от порта, оно будет перенаправлено на устройство в соответствующей межсетевой сети.
Но используемый мной интернет-провайдер не поддерживает переадресацию портов.
Я думал, что это не невозможно благодаря программному обеспечению Team-Viewer. Потому что когда меня подключили к другу в тим-вьюере, я открыл вайр-акулу и просмотрел его.
Потом я увидел, что пакет данных обменивается одноранговым способом. Поскольку адреса источника назначения были моим ip и ip друга
Это означает, что обмен видеоданными происходит без участия дополнительного сервера
Я выделил соединение team-viewer.
61.245.175.81 — это публичный IP моего друга. 192.168.1.130 — мой внутренний IP
Изображение

Я хочу сделать то же самое
Вот мой простой код сокета. Это не работает через Интернет, поскольку не существует правила переадресации маршрутизатора. Я новичок в области сокетов и сетей.
Sever

Код: Выделить всё

import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(('', 12000))

while True:
message, address = server_socket.recvfrom(1024)
message = repr(message)
print("Connected from ->  " + str(address) )
print("Received data ->  " + message)
reply = b"Hi from server :) "
server_socket.sendto(reply, address)
Клиент

Код: Выделить всё

import time , datetime
import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_socket.settimeout(1.0)

message = bytes(str(datetime.datetime.now()),'utf-8')
addr = ("192.168.1.130", 12000)

client_socket.sendto(message, addr)
try:
data, server = client_socket.recvfrom(1024)
print( repr(data) )
except: #socket.timeout:
print('REQUEST TIMED OUT')
Кто-нибудь может объяснить мой вопрос

Подробнее здесь: https://stackoverflow.com/questions/680 ... forwarding
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»