Как назначить n портов серверу в программе с несколькими сокетами клиент-сервер? - PullRequest
0 голосов
/ 19 января 2019

Мне нужно определить 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...