add network receive function and some ajust but no test

This commit is contained in:
2019-12-14 21:52:01 +08:00
parent 9924a30108
commit 04da406157
4 changed files with 77 additions and 14 deletions

View File

@@ -3,11 +3,15 @@ import socket
import queue
from mswp import Datapack
from forwarder import receive_queues, send_queue
from config import jsondata
receive_queue = receive_queues[__name__]
RECV_BUFF = jsondata.try_to_read_jsondata('recv_buff', 4096)
def main():
netlist = Netlist()
netrecv = Netrecv()
while True:
dp = receive_queue.get()
dp.encode()
@@ -25,15 +29,67 @@ def process_hostname(hostname):
return ip
def read_netlisttxt_file():
try:
with open('netlist.txt', 'r') as f:
raw_data = f.read()
return raw_data
except Exception as e:
print('Error: %s, %s\n'
'If you are the first time to run this program, \n'
'Please use "netlist_sample.txt" to create "netlist.txt", \n'
'Program will continue...' % (type(e), str(e)))
return ''
class Netrecv:
def __init__(self):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # initial socket, bind and listen, start to accept
addr = jsondata.try_to_read_jsondata('listen_addr', '127.0.0.1')
port = jsondata.try_to_read_jsondata('listen_port', 3900)
print('MSW now trying to bind the network %s, please allow it' % str((addr, port)))
s.bind((addr, port))
listen_num = jsondata.try_to_read_jsondata('listen_num', 39)
s.listen(listen_num)
self.s = s
self.thread = threading.Thread(target=self.check_accpet_connection, args=())
self.thread.start()
self.connection_list = []
self.connection_process_thread_list =[]
def check_accpet_connection(self):
while True:
conn, addr = self.s.accept()
self.connection_list.append((conn, addr))
connection_thread = threading.Thread(target=self.process_connection, args=())
self.connection_process_thread_list.append(connection_thread)
connection_thread.start()
def process_connection(self, conn, addr):
print('Connection accpet %s' % str(addr))
while True:
data = conn.recv(RECV_BUFF) # here needs to check whether the package is continued
dp = Datapack(check_head=False)
dp.encode_data = data
dp.decode()
send_queue.put(dp)
class Netlist: # contain net list and network controller
def __init__(self):
self.send_queue = queue.Queue()
with open('netlist.txt', 'r') as f:
raw_data = f.read()
raw_data = read_netlisttxt_file()
lines = raw_data.split('\n')
ips = []
for line in lines:
ip, port = line.split(':')
ip_port = line.split(':')
if len(ip_port) == 1:
ip = ip_port[0]
if not ip: # Check whether ip is null
continue
port = jsondata.get('listen_port')
if not port:
port = 3900
ip = process_hostname(ip)
port = int(port)
ips.append((ip, port))
@@ -56,13 +112,13 @@ class Netlist: # contain net list and network controller
conn = self.addr_to_conn[addr]
print('Connection %s has connected' % str(addr))
while True:
data = conn.recv(4096)
data = conn.recv(RECV_BUFF)
if not data:
print('disconnected with %s' % str(addr))
conn.close()
return
data = data.decode()
print(data)
print(data) # here needs to be add more functions
def check_queue(self):
while True: