Мне нужно определить n портов для каждого сервера, чтобы я мог знать, подключен ли какой-либо сервер к более чем 1 клиенту, чем к какому порту подключается.
import queue
import socket
import random
import threading
import pandas as pd
UDP_IP = "127.0.0.1"
num_server = 3
num_client = 7
server_thread_list = []
client_thread_list = []
sid = []
sip = []
dip = []
connect = []
l_info= []
s_port = []
topology_buffer = queue.Queue()
def create_csv():
source_mac = sid
source_ip = sip
dest_mac = connect
destination_ip = dip
link_info = l_info
source_portno = s_port
df = pd.DataFrame()
df["Source_MAC"] = source_mac
df["Source_IP"] = source_ip
df["Source_Port_No"] = source_portno
df["Dest_MAC"] = dest_mac
df["Dest_IP"] = destination_ip
df["Link_Info"] = link_info
print(df)
df.to_csv("network.csv", index = False)
def server(id):
UDP_PORT = 5000 + id
soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
soc.bind((UDP_IP,UDP_PORT))
while True:
data, addr = soc.recvfrom(1024)
data = data.decode()
data1 = "S" + str(id)
print("Server" + str(id) + "recieved message from" + str(data))
topology_buffer.put_nowait(str(data1 + "<-->" + data))
for i in range(len(data1)-1):
sid.append(data1)
ser_ip = '192.168.1.' + str(random.randint(0, 255))
sip.append(ser_ip) # generate ip address
s_port.append(UDP_PORT)
conn = data
connect.append(conn)
dest_ip = '192.168.1.' + str(random.randint(0, 255))
dip.append(dest_ip)
def client(id):
if id<= len(server_thread_list):
UDP_Port = 5000 + id
else:
UDP_Port = 5000 + random.randint(0, len(server_thread_list))
soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
message = ("C" + str(id))
soc.sendto(message.encode(),(UDP_IP, UDP_Port))
soc.close()
create_csv()
def topology():
while True:
link = topology_buffer.get()
print(link)
for i in range (num_server):
t = threading.Thread(target = server, args=(i,))
server_thread_list.append(t)
t.start()
for i in range (num_client):
t = threading.Thread(target = client, args=(i,))
client_thread_list.append(t)
t.start()
topology()
Я хочу получить результатas, номер порта, который будет напечатан вместе с соединением.
Например: сервер S1a получил сообщение от c1 на номер порта 5002. Сервер S1b получил сообщение от c2 на номер порта 5003. Сервер S2b получил сообщение от c3 наномер порта 5004.