#python #qt #sockets #server
#питон #qt #розетки #сервер
Вопрос:
я создаю программу резервного копирования, я отправляю все данные с помощью tcp-сокетов на C , но даже когда в моих журналах говорилось, что данные отправляются, они не поступают на мою сторону python, честно говоря, я не знаю, чего мне не хватает, я получал данные и создавал файл несколько дней назад, кто-нибудь может взглянуть на это?
Идея состоит в том, чтобы отправить файл и данные файла, затем сервер получает их и создает папку с датой и временем и создает файл внутри, это может быть 1 файл или 1000 файлов
Клиент C , он отправляет данные
void Server::Tcp_Send(QString File_Data){ Gen L; QString Ip("192.168.1.68"); QString filename, data_info, size, size_8_Byte; qint64 filesize; quint64 x = 0; bool yes = false; QByteArray block, block_file; filename.append("Data/" File_Data); QFile Archivo(filename); if (Tcp_socket-gt;state() == QAbstractSocket::UnconnectedState){ L.log("Before conecction"); Tcp_socket-gt;connectToHost(Ip, 7000, QIODevice::WriteOnly); Tcp_socket-gt;waitForConnected(); QDataStream salida(Tcp_socket); Archivo.open(QIODevice::ReadOnly); block_file = Archivo.readAll(); block.append(block_file); filesize = Archivo.size(); Archivo.close(); data_info = File_Data "lt;SEPARATORgt;" QString::number(filesize) "lt;SEPARATORgt;"; block.prepend(data_info.toUtf8()); size = QString::number(block.size()); size_8_byte = size.rightJustified(8, ' '); block.prepend(size_8_byte.toUtf8()); if (Tcp_socket-gt;isValid()){ L.log("before sending data"); salida.writeRawData( (char*)(block.data()), block.size() ); yes = Tcp_socket-gt;flush(); Tcp_socket-gt;waitForBytesWritten(); L.log(block.data()); if (yes == true) {L.log("Data Send");} else {L.log("The Data was not send"); } L.log ("Coneection terminated"); } } }
сторона python, это сторона сервера
def servidor(): # handler principal print (f"Iniciando el Servidor Sockets") print (f"Current IP Addres: " get_ip()) log("Iniciando servidor") server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((get_ip(), 8000)) # set server ip and port server.listen(2) # number of connectios allowed conn, address = server.accept() # Accept the Client connection # add the separator lt;SEPARATORgt; to diferentiate betwenn files # send filename first, then size and the file itself last upack = struct.Struct('8s') # codificacion erase all the 8s's msg = b'' # same as above, erase all the b's while True: #while not msg == 'lt;FINALgt;': # data_info = conn.recv() # log(data_info) while True: #1024 is the bandwidth bits try: while len(msg) lt; 8: try: msg = conn.recv(100) except: break sice = upack.unpack(msg[:8])[0] sice = int(sice.decode("utf-8").strip()) # decodificacion en utf-8 msg = msg[8:] #while not msg == 'lt;FINALgt;': while (msg): # creacion y escritura del archivo try: msg = conn.recv(1024) # 1024 except: break log(msg) filename, filesize, file_Data = msg.split("lt;SEPARATORgt;") # split the name and size of file and file data itself filename, no_use = filename.split(".") # the extension its been send i need to fix that later file_name = crear_directorio() filename '.db' print (file_name) file = open(file_name, 'wb') # open file for writing in binary file.write(file_Data) file.close() log("archivo " filename ".db creado") #log(file_Data) except: print (f"coneccion terminada") log("Conneccion Terminada por el cliente")
Комментарии:
1. это похоже на то, что ваш сервер python прослушивает порт 8000, в то время как клиент C пытается подключиться к порту 7000