Как принять tcp пакет с флагом PSH от сервера
Я делаю API к стороннему приложению. Это приложение отправляет следующие запросы:
Первые 2 пакета я успешно отправляю и получаю ответ, а вот потом сервер сам отправляет мне пакет и тут socket.recv()
его не видит.
Я не очень понимаю как это происходит и как мне получить PSH пакет от сервера.
Мой код:
tcp = TCPConnection()
tcp.connect(host, port)
tcp.send(b'00000017000f70622e4c6f6262794c697374524551000000000807')
tcp.readlines()
tcp.send(b'00000025001f70622e48616c6c4f6646616d654c6174657374596561724d6f6e746852455100000000')
tcp.readlines()
tcp.readlines()
tcp.readlines()
tcp.readlines()
tcp.readlines()
tcp.readlines()
tcp.readlines()
tcp.readlines()
tcp.close()
class TCPConnection:
def __init__(self, sock=None):
if sock is None:
self.sock = socket.socket(
socket.AF_INET, socket.SOCK_STREAM)
else:
self.sock = sock
def decode_hexstring(self, hexstring):
decoded = ''
for i in range(0, len(hexstring), 2):
b = hexstring[i:i+2]
b = b.decode() # it's a byte-string
try:
c = bytes.fromhex(b).decode()
except: # the last char might be missing
c = '☐'
decoded = decoded + c
return decoded
def connect(self, host, port):
try:
self.sock.connect((host, port))
print('Successful Connection')
except:
print('Connection Failed')
def readlines(self):
data = self.sock.recv(1024)
print(data)
def send(self, bytehexdata: str):
data = self.decode_hexstring(bytehexdata)
self.sock.send(str.encode(data))
def close(self):
self.sock.close()
def listen(self, cons: int):
self.sock.listen(cons)
def bind(self, host, port):
self.sock.bind((host, port))
def accept(self):
return self.sock.accept()
def get_my_ip(self):
hostname = socket.gethostname()
return socket.gethostbyname(hostname)
Меня еще смущает то, что у меня после каждого доставленного пакета отправляется флаг FIN