@AlexGenesis

Как праильно пробить UDP?

Доброго времени суток, на днях заинтересовался пробивкой TCP\UDP и решил написать небольшую программу, моей задачей было чтобы сперва 2 клиента подключались к главному серверу, а после этого уже устанавливали между собой прямую связь, но как можно догадаться удовлетворительного результата я не получил, так что буду благодарен за любые ответы.

Сервер:
import socket, threading, time

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(("192.168.0.122", 4545))

addres_lt = []

def accept():
    while True:
        message, addres = server_socket.recvfrom(1024)
        addres_lt.append(addres)
        port = str(addres[1])
        server_socket.sendto(port.encode(), addres)
        
def main():
    while True:
        if len(addres_lt) == 2:
            print(addres_lt)
            send_port()
            time.sleep(0.5)

def send_port():
    for sock in addres_lt:
        if sock == addres_lt[0]:
            server_socket.sendto(str(addres_lt[1][1]).encode(), sock)
        else:
            server_socket.sendto(str(addres_lt[0][1]).encode(), sock)

p1 = threading.Thread(target=accept)
p2 = threading.Thread(target=main)
p1.start()
p2.start()


Клиент:
import socket, time, threading

client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_socket.settimeout(1.0)
message = 'test'
addr = ("47.23.232.259", 4545)
get_sock = False

client_socket.sendto(message.encode(), addr)

data, server = client_socket.recvfrom(1024)

data = data.decode()

while get_sock == False:
    try:
        adr, server = client_socket.recvfrom(1024)
        get_sock = True
    except:
        pass

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(("192.168.0.122", int(data)))

adr = ("47.23.232.259", int(adr.decode()))

def recv():
    while True:
        message, addres = server_socket.recvfrom(1024)
        print(message)

def send():
    while True:
        print("My port: ", data,"\nTry connect to: ", adr)
        server_socket.sendto("Connection established".encode(), adr)

p1 = threading.Thread(target=recv)
p2 = threading.Thread(target=send)
p1.start()
p2.start()


Заранее извиняюсь за местами неграмотный код, писал в спешке.
  • Вопрос задан
  • 141 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы