Я пытаюсь установить сверстников для сверстников, используя удары в отверстиях 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
UDP -отверстие в питоне ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как выбрать одно отверстие в объекте отверстия, содержащем несколько отверстий?
Anonymous » » в форуме C# - 0 Ответы
- 31 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Невозможно назначить свободное отверстие ошибке оболочки при сглаживании полигонов
Anonymous » » в форуме Python - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Отбрасываются ли пакеты UDP, если контрольная сумма заголовка UDP неверна?
Anonymous » » в форуме C++ - 0 Ответы
- 49 Просмотры
-
Последнее сообщение Anonymous
-