Доброго времени суток, на днях заинтересовался пробивкой 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()
Заранее извиняюсь за местами неграмотный код, писал в спешке.