UDP -отверстие в питонеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 UDP -отверстие в питоне

Сообщение Anonymous »

Я пытаюсь установить сверстников для сверстников, используя удары в отверстиях UDP. Сначала я устанавливаю соединение с сервером, а затем пытаюсь провести связь между двумя клиентами, но я не могу общаться между двумя компьютерами, которые находятся за двумя разными NAT, так как я не понимаю, какой IP -адрес и порт я должен вводить для создания общения.
, пожалуйста, скажите мне, какие изменения я должен вносить в код ниже, так что 2 компьютеры не предполагают. ngrok < /p>
Server.py

import socket
import struct
import sys

server_listening_port = 12345

sockfd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sockfd.bind(("", server_listening_port))
print("Listening on the port " + str(server_listening_port))

client_requests = []

while True:
data, addr = sockfd.recvfrom(32)
client_requests.append(addr)
print("Connection from: " + str(addr))

if len(client_requests) == 2:
break

client_a_ip = client_requests[0][0]
client_a_port = client_requests[0][1]
client_b_ip = client_requests[1][0]
client_b_port = client_requests[1][1]

message = ": "

sockfd.sendto(str(client_a_ip).encode("utf-8") + message.encode("utf-8") + str(client_a_port).encode("utf-8"), client_requests[1])
sockfd.sendto(str(client_b_ip).encode("utf-8") + message.encode("utf-8") + str(client_b_port).encode("utf-8"), client_requests[0])
sockfd.close()
< /code>
выше - сервер rendezvous < /p>
ClientA.py

import socket
import struct
import sys
import time
master = ("Server_IP", Port)

#Create dgram udp socket
try:
sockfd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
message = "Hello"
sockfd.bind(('', 0))
sockfd.sendto(message.encode("utf-8"), master)

except socket.error:
print("Failed to create socket")
sys.exit()

# #Receiving peer info from server
peer_data, addr = sockfd.recvfrom(1024)
print (peer_data)

print("trying to communicate with peer")
peer_ip = peer_data.decode("utf-8").split(":")[0]
peer_port = int(peer_data.decode("utf-8").split(":")[1])

peer = (peer_ip, peer_port)

while 1:
message1 = input(str("You:>>"))
message = message.encode("utf-8")
sockfd.sendto(str(message).encode("utf-8"), peer)
incoming_msg, sendaddr = sockfd.recvfrom(1024)
incoming_msg = incoming_msg.decode("utf-8")
print("ClientB:>>",incoming_msg)
< /code>
выше код является клиентом A < /p>
ClientB.py

import socket #For sockets
import struct
import sys #For exit
import time
master = ("Server_IP", port)
me = ("ClientB_IP", port)

#Create dgram udp socket
try:
sockfd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
message = "Hello"
sockfd.bind(('', 0))
sockfd.sendto(message.encode("utf-8"), master)

except socket.error:
print("Failed to create socket")
sys.exit()

# #Receiving peer info from server
peer_data, addr = sockfd.recvfrom(1024)
print (peer_data)

print("trying to communicate with peer")
peer_ip = peer_data.decode("utf-8").split(":")[0]
peer_port = int(peer_data.decode("utf-8").split(":")[1])
peer = (peer_ip, peer_port)

while 1:
incoming_msg, sendaddr = sockfd.recvfrom(1024)
incoming_msg = incoming_msg.decode("utf-8")
print("ClientA:>>", incoming_msg)
message = input(str("You :>>"))
message = message.encode("utf-8")
sockfd.sendto(str(message).encode("utf-8"), peer)
< /code>
выше, клиент B < /p>
Я сталкиваюсь только с проблемой только в IP -адресе и порте. Итак, пожалуйста, помогите мне с этим установить связь между двумя компьютерами за двумя разными Nats

Подробнее здесь: https://stackoverflow.com/questions/712 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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