rewrite sticky package function
This commit is contained in:
@@ -69,46 +69,83 @@ class Netrecv:
|
|||||||
|
|
||||||
def process_connection(self, conn, addr):
|
def process_connection(self, conn, addr):
|
||||||
print('Connection accpet %s' % str(addr))
|
print('Connection accpet %s' % str(addr))
|
||||||
|
data = b''
|
||||||
while True:
|
while True:
|
||||||
data = conn.recv(RECV_BUFF)
|
new_data = conn.recv(RECV_BUFF)
|
||||||
if not data:
|
if not new_data:
|
||||||
conn.close()
|
conn.close()
|
||||||
print('return')
|
print('return 1')
|
||||||
return
|
return
|
||||||
while data:
|
data += new_data
|
||||||
|
|
||||||
|
while True:
|
||||||
|
|
||||||
|
# try unpack #
|
||||||
dp = Datapack(check_head=False)
|
dp = Datapack(check_head=False)
|
||||||
dp.encode_data = data
|
dp.encode_data = data
|
||||||
try:
|
try:
|
||||||
print(data)
|
if data:
|
||||||
data = dp.decode(only_head=True)
|
data = dp.decode(only_head=True)
|
||||||
except Exception as e: # Not enough data
|
else:
|
||||||
print('Decode error %s: %s' % (type(e), str(e)))
|
print('Null data')
|
||||||
|
break
|
||||||
|
except Exception as e:
|
||||||
|
print('Decode error')
|
||||||
break
|
break
|
||||||
|
# try unpack #
|
||||||
|
|
||||||
if dp.method == 'file':
|
if dp.method == 'file':
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
length = int(dp.head['length'])
|
length = int(dp.head['length'])
|
||||||
data_length = len(data)
|
data_length = len(data)
|
||||||
|
|
||||||
|
# 3 condition
|
||||||
if length == data_length:
|
if length == data_length:
|
||||||
print('length == data_length')
|
print('=')
|
||||||
dp.body = data
|
dp.body = data
|
||||||
data = b''
|
data = b''
|
||||||
elif length > data_length:
|
|
||||||
print('length > data_length')
|
|
||||||
dp.body = data
|
|
||||||
while len(dp.body) < length:
|
|
||||||
data = conn.recv(RECV_BUFF)
|
|
||||||
if not data:
|
|
||||||
conn.close()
|
|
||||||
print('Connection close, dp drop')
|
|
||||||
return
|
|
||||||
need_length = len(data) - len(dp.body)
|
|
||||||
dp.body += data[:need_length]
|
|
||||||
data = data[need_length:]
|
|
||||||
dp.encode()
|
|
||||||
print('---------------\n' + dp.encode_data.decode() + '\n---------------')
|
|
||||||
|
|
||||||
|
|
||||||
|
elif length > data_length:
|
||||||
|
while data_length < length:
|
||||||
|
new_data = conn.recv(RECV_BUFF)
|
||||||
|
if not new_data:
|
||||||
|
print('return 2')
|
||||||
|
return
|
||||||
|
|
||||||
|
new_data_size = len(new_data)
|
||||||
|
still_need = length - data_length
|
||||||
|
print(still_need)
|
||||||
|
|
||||||
|
if new_data_size == still_need:
|
||||||
|
print('data', data)
|
||||||
|
print('net_data', new_data)
|
||||||
|
data += new_data
|
||||||
|
data_length = len(data)
|
||||||
|
dp.body = data
|
||||||
|
data = b''
|
||||||
|
|
||||||
|
elif new_data_size < still_need:
|
||||||
|
print('data', data)
|
||||||
|
print('net_data', new_data)
|
||||||
|
data += new_data
|
||||||
|
data_length = len(data)
|
||||||
|
|
||||||
|
else:
|
||||||
|
print('else')
|
||||||
|
data += new_data[:still_need]
|
||||||
|
new_data = new_data[still_need:]
|
||||||
|
data_length = len(data)
|
||||||
|
dp.body = data
|
||||||
|
data = new_data
|
||||||
|
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
|
||||||
|
dp.encode()
|
||||||
|
print('###############\n' + dp.encode_data.decode() + '\n###############')
|
||||||
|
|
||||||
|
|
||||||
def _process_connection(self, conn, addr):
|
def _process_connection(self, conn, addr):
|
||||||
print('Connection accpet %s' % str(addr))
|
print('Connection accpet %s' % str(addr))
|
||||||
|
|||||||
14
test_file.py
14
test_file.py
@@ -5,15 +5,15 @@ data = '''post log msw/1.0
|
|||||||
from: network
|
from: network
|
||||||
flag: abcdefgh
|
flag: abcdefgh
|
||||||
num: 1/1
|
num: 1/1
|
||||||
lengt'''
|
length: 9
|
||||||
|
|
||||||
data2 = '''h: 9
|
12345'''
|
||||||
|
|
||||||
123'''
|
data2 = '''678'''
|
||||||
|
|
||||||
data3 ='''45678'''
|
data3 = '''9'''
|
||||||
|
|
||||||
data4 = '''9post log msw/1.1
|
data4 = '''post log msw/1.1
|
||||||
from: network
|
from: network
|
||||||
flag: 12345678
|
flag: 12345678
|
||||||
num: 1/1
|
num: 1/1
|
||||||
@@ -21,7 +21,7 @@ length: 3
|
|||||||
|
|
||||||
abc'''
|
abc'''
|
||||||
|
|
||||||
data_list = [data, data2, data3,data4]
|
data_list = [data, data2, data3, data4]
|
||||||
code_list = []
|
code_list = []
|
||||||
for i in data_list:
|
for i in data_list:
|
||||||
code_list.append(i.encode())
|
code_list.append(i.encode())
|
||||||
@@ -31,4 +31,4 @@ s.connect(('127.0.0.1', 3900))
|
|||||||
|
|
||||||
for i in code_list:
|
for i in code_list:
|
||||||
s.sendall(i)
|
s.sendall(i)
|
||||||
time.sleep(1)
|
time.sleep(0)
|
||||||
Reference in New Issue
Block a user