Мой TCP-сервер отправляет только b '' вместо маринованных данных - PullRequest
0 голосов
/ 29 января 2019

У меня есть TCP-сервер и клиент приложения Kivy, при инициализации я отправляю серверный код 90010 и получаю все данные нормально, однако, когда я перехожу на другой экран, где мне нужно снова получать данные, я получаю только b '', однако прина других экранах мне нужно только отправлять данные, и это прекрасно работает, я, честно говоря, не могу понять, почему при отправке пустых байтовых строк любая помощь действительно приветствуется

Я знаю, что код достигает кода сервера if == 919 баллов, поэтому он должен отправлять данные, но ничего не принимается !, я также включил s.connect в инициализацию каждого экрана, возможно, это вызывает проблемы, однако я совершенно не уверен,

TCP-код этого SERVERCODEнаходится в классе clientthread и использует тот же метод, что и клиент с GetLength (), чтобы получить код сервера

class clientthread(thread)

    def run(self)
        while true:
            SERVERCODE = self.getlength
            if SERVERCODE == b''
                break
            else:
                while true:

                    elif SERVERCODE == 90010:
                        global Todays_refgroup
                        print(Todays_refgroup)
                        print(statuslist)
                        TF_Pickles = pickle.dumps(Todays_refgroup)
                        INIT_Length = self.Pack_data(TF_Pickles)
                        TF_Status = pickle.dumps(statuslist)
                        INIT_Status = self.Pack_data(TF_Status)
                        conn.sendall(INIT_Length)
                        conn.sendall(TF_Pickles)
                        conn.sendall(INIT_Status)
                        conn.sendall(TF_Status)
                        break

                   elif SERVERCODE == 919:
                        pickle_status = pickle.dumps(statuslist)
                        len_statpick = self.Pack_data(pickle_status)
                        conn.sendall(len_statpick)
                        conn.sendall(pickle_status)
                        break

TCP_IP = '127.0.0.1'
TCP_PORT = 8079
BUFFER_SIZE = 1024

tcpServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpServer.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcpServer.bind((TCP_IP, TCP_PORT))
threads = []

while True:
    tcpServer.listen(4)
    print("                                  : Waiting for connections from TCP clients...")
(conn, (ip, port)) = tcpServer.accept()
newthread = ClientThread(ip, port)
newthread.start()
threads.append(newthread)

Код клиента

    servercode = StructPack(919)
    self.s.sendall(servercode)
    buf = GetLength(self.s)
    stats = GetSpecificAmount(self.s, buf)
    print(stats)

def GetLength(socket):
    buf = b''
    while len(buf) < 4:
        # print('waiting...')
        tbuf = socket.recv(4 - len(buf))
        if tbuf == '':
            raise RuntimeError("Lost connection with peer")
        buf += tube

    SERVERCODE = struct.unpack('!I', buf)[0]
    return SERVERCODE

def GetSpecificAmount(socket, Amount_2Recieve):
    data = []
    len_recvd = 0
    while len_recvd < Amount_2Recieve:
        buf = socket.recv(Amount_2Recieve - len_recvd)
        if buf == '':
            raise RuntimeError("Lost connection with peer")
        data.append(buf)
        len_recvd += len(buf)
        # print(len_recvd)
   df = pickle.loads(b''.join(data))
   return df
...