qtcsocket/qtcserver传输,如何使用QdataStream传输表d

2024-04-19 13:08:13 发布

您现在位置:Python中文网/ 问答频道 /正文

qtcsocket/qtcserver传输,如何使用QdataStream传输表数据??你知道吗

有一些想法:在每一行上写数据流,然后调用Write(),但是如何再写一次呢?你知道吗

存在问题:数据乱码,第一行数据重复写入。。你知道吗

从fh文件中提取保存的数据流数据,写入自动闭塞用于TCP传输 (数据以表格每行的格式保存,读取行数和列表数据)—>;无法正确显示 寻找例子或想法,用PYQT5写

服务器代码:

self.block = QByteArray()
fh = QFile(name)
        fh.open(QIODevice.ReadOnly)
        tableData = QDataStream(fh)        # Get Data from File
        tableData.setVersion(QDataStream.Qt_5_6)

        stream = QDataStream(self.block, QIODevice.WriteOnly)    # Input data to socket
        stream.setVersion(QDataStream.Qt_5_6)    
        self.clientConnection = self.server.nextPendingConnection()    


        while not tableData.atEnd():
            num,table=0,''
            num = tableData.readUInt16()
            table = tableData.readQStringList()

            stream.writeUInt16(0)
            stream.writeUInt16(num)
            stream.writeQStringList(table)
            stream.device().seek(0)
            stream.writeUInt16(self.block.size() - SIZEOF_INT16)  #
            self.clientConnection.write(self.block)
            self.clientConnection.flush()

你知道吗客户端.py你知道吗

def readMessage(self):
    try:

        print('readmessage')

        stream = QDataStream(self.socket)
        stream.setVersion(QDataStream.Qt_5_6)
        while not stream.atEnd():

            if self.blockSize == 0:

                if self.socket.bytesAvailable()<SIZEOF_UINT16:

                    return
                self.blockSize = stream.readUInt16()

            if self.socket.bytesAvailable()<self.blockSize:

                return
            num=stream.readUInt16()
            message = stream.readQStringList()      #?????????

            print(num,message)
            if num<1:

                self.tableWidget.setRowCount(1) # First row Data
                for a in range(0, 11):
                    # print(a)
                    newItem = QTableWidgetItem(message[a])
                    self.tableWidget.setItem(0, a, newItem)
            else:
                self.tableWidget.insertRow(0)
                for a in range(0, 11):                      
                    newItem = QTableWidgetItem(message[a])
                    self.tableWidget.setItem(0, a, newItem)
        print('closee')
        self.socket.disconnect()
        self.socket.close()

    except:
        self.socket.close()

输入数据:

enter image description here

错误输出数据:

enter image description here


Tags: 数据selfmessagestreamifsocketblocknum