本文介绍了通过套接字空间发送数据,使用空格接收的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用C + +与QT4为此。当我尝试发送大的html文件(在这种情况下,8kb),发送和接收的过程工作良好。但是收到的文件在html文件的每个字符之间都有空格。在这里一个例子,
文件发送像这样:

I'm using C++ with QT4 for this. And when I try to send large html files(in this case, 8kb), the process of sending and receiving work well. But the file received come with spaces between each character of the html file. Here an example,the file is sent like this:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">a</p></body></html>

并收到,如下所示:

  ¼ < ! D O C T Y P E   H T M L   P U B L I C   " - / / W 3 C / / D T D   H T M L   4 . 0 / / E N "   " h t t p : / / w w w . w 3 . o r g / T R / R E C - h t m l 4 0 / s t r i c t . d t d " >
 < h t m l > < h e a d > < m e t a   n a m e = " q r i c h t e x t "   c o n t e n t = " 1 "   / > < s t y l e   t y p e = " t e x t / c s s " >
 p ,   l i   {   w h i t e - s p a c e :   p r e - w r a p ;   }
 < / s t y l e > < / h e a d > < b o d y   s t y l e = "   f o n t - f a m i l y : ' M S   S h e l l   D l g   2 ' ;   f o n t - s i z e : 8 . 2 5 p t ;   f o n t - w e i g h t : 4 0 0 ;   f o n t - s t y l e : n o r m a l ; " >
 < p   s t y l e = " - q t - p a r a g r a p h - t y p e : e m p t y ;   m a r g i n - t o p : 0 p x ;   m a r g i n - b o t t o m : 0 p x ;   m a r g i n - l e f t : 0 p x ;   m a r g i n - r i g h t : 0 p x ;   - q t - b l o c k - i n d e n t : 0 ;   t e x t - i n d e n t : 0 p x ; " > < / p > < / b o d y > < / h t m l >

我用于发送和接收的代码:

the code i'm using for sending and receiving:

发送代码:
qDebug()<< 已连接。将文件发送到服务器;
QString text = ui-> QuestHtmlText-> toPlainText();

Sending code: qDebug() << "Connected. Sending file to the server"; QString text = ui->QuestHtmlText->toPlainText();

if(text.length() < 1024)
{
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out << quint16(0) << QUESTION_HTML;
    out << text;
    out.device()->seek(0);
    out << quint16(block.size() - sizeof(quint16));
    qDebug() << "Block size: " << block.size();
    socket.write(block);
    return;
}

for(int i = 0; i < text.length(); i+=1024)
{
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out << quint16(0) << QUESTION_HTML;
    if((text.length() - i) > 1024)
        out << text.mid(i, i+1024);
    else
        out << text.right(1024 - i);
    out.device()->seek(0);
    out << quint16(block.size() - sizeof(quint16));
    qDebug() << "Block size: " << block.size();
    socket.write(block);
}

接收代码:

qDebug() << "Writing File";
QDataStream in(this);
QString temp = "Teste.html", text;
QFile myFile(".//Questions//" + temp);
myFile.open(QIODevice::WriteOnly);
QDataStream out(&myFile);
while(!in.atEnd())
{
    in >> text;
    out << text;
}


推荐答案

到一个文件,并获得这个文件到QByteArray,并将QbyteArray完全发送到套接字。

I solved the problem writing it to a file and getting this file to a QByteArray, and sending the QbyteArray entirely to the socket.

这篇关于通过套接字空间发送数据,使用空格接收的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-21 02:37