В клиенте проблем ни каких, возникла мысль посмотреть а что приходит на сервер использовал такой скрипт
strWork *workStr = new strWork; // класс проверки и удаления нежелаемых символов
long content_length = atol(workStr->preg_replace("^`<>/'", "", getenv("CONTENT_LENGTH")));
char *postContent = (char *)malloc(content_length);
fread(postContent,content_length,1,stdin);
Parse *queryPost = new Parse(postContent); // класс разбора на пары &=
char *fileMsg = "temp/newMsgForum";
ofstream ofsfile(fileMsg);
ofsfile << queryPost->get_item_n("newMsg") << endl;
ofsfile.close();
delete queryPost;
delete workStr;
в файл все нормально пишется не зависимо от длины переданого текста, похоже просто у меня где-то тормоз стоит на длинные сообщения при обработке текста на сервере.
P.S. и даже нашел где, я при записе в БД прогонял проверку на удаление нечитаемых символов, так вот это и не успевало вернуть сообщение для добавления, сейчас перенес это в main и проверяю сразу при считывании CONTENT_LENGTH и все работает
--------------------------------
Решил проблему безразрывным текстом, вставив
str.replace(" ", " ");
то есть заменил все пробелы на короткий пробел, а то возникла еще одна проблема стало рвать по первому пробелу.
=========================================================================
Отправка в клиенте идет таким образом
toSite = new network;
toSite->moveToThread(toSite);
toSite->setStrCgi( "forum", "uid="+uid+"&razdel="+razdelStr+"&newTema=&idTema="+idTema+"&newMsg="+txtMsgEdit->toPlainText() );
toSite->start();
connect(toSite, SIGNAL(siteResponse(QString)),SLOT(otvServer(QString)));
--------------------
class network
-------------------
network.h
#ifndef NETWORK_H
#define NETWORK_H
#include "gameGlobal.h" // в нем подключены все нужные мне библиотеки и обьявлены глобальные переменные
extern QString serverSite;
class network : public QThread
{
Q_OBJECT
public:
network();
void setStrCgi(QString strUrl, QString postStr){
urls = "http://"+serverSite+"/cgi-bin/"+strUrl;
dataPost = postStr.toAscii();
}
protected:
void run();
private:
QByteArray dataPost;
QNetworkAccessManager *manager;
QNetworkReply* reply;
QString urls;
signals:
void siteResponse(QString strOtv);
private slots:
void slotReadyRead();
};
network.cpp
#include "network.h"
network::network()
{
manager = new QNetworkAccessManager(this);
return;
}
void network::run()
{
QNetworkRequest request;
request.setUrl(QUrl(urls));
//-- отправка POST
if(dataPost != NULL){
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/plain");
request.setRawHeader(QByteArray("User-Agent"), QByteArray("User-Agent=Clint Site")); //-- необязательно
reply = manager->post(request, dataPost);
} else //-- если нет отправим GET
reply = manager->get(request);
connect(reply, SIGNAL(finished()), this, SLOT(slotReadyRead()));
this->exec();
return;
}
void network::slotReadyRead()
{
emit siteResponse(reply->readAll());
return;
}
----------------------
Принимаю на сервере вот так
strWork *workStr = new strWork;
long content_length = atol(workStr->preg_replace("^`<>/'", "", getenv("CONTENT_LENGTH")));
char *postContent = (char *)malloc(content_length);
fread(postContent,content_length,1,stdin);
Parse *queryPost = new Parse(postContent);
uid = queryPost->get_item_n("uid");
newMsg *msgForum = new newMsg(queryPost->get_item_n("razdel"),
queryPost->get_item_n("newTema"),
queryPost->get_item_n("idTema"),
queryPost->get_item_n("newMsg")
);
delete queryPost;
delete workStr;
--------------
Class Parse
тут полностью выложен
удаление нежилаемых символов обсуждалось
в этой теме