QTcpsocket/QTcpserver transmission, how to use QdataStream to transfer a table data??
There are ideas: Write data stream on each row and then call write(), but how to write again?
Existing issues: Data is garbled, the first line of data is written repeatedly..
Extract saved data stream data from fh file, write self.block for TCP transfer (The data is saved in the format of each row of the table, the number of rows and list data is read out) ->Cannot be displayed properly Seeking examples or ideas, written in PYQT5
Server code:
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()
client.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()
The input Data:
The error output data: