请问谁做过qt的QTcpServer(linux系统) 与 标准的socket通信(windows系统)啊。 我connect,qt就是不发出newConnection消息,从接受不了连接。 导致标准socket的connect发生错误! 不知道是不是不能这样用.
代码如下:
windows 客户端代码为:(windows)
CODE:[Copy to clipboard] try
{
ssConnect.Create();
ssConnect.Connect(sbServer);
ssConnect.Write(strTransHead1,50,10);
ssConnect.Write(DataBuf,uiFileLen,100);
}
catch (CBlockSocketException* pe)
{
AfxMessageBox(pe->m_strMessage);
pe->Delete();
AfxMessageBox("传输失败");
}
ssConnect.Close();
AfxMessageBox("传输完毕");
服务器端的代码(linux):
CODE:[Copy to clipboard]tcpPowerServer = new QTcpServer(this);
if (!tcpPowerServer->listen(QHostAddress("192.168.1.3"),12338)) {
QMessageBox::critical(this, tr("Pluse Power Web Server"),
tr("Unable to start the Pluse power Web server!")
);
close();
return;
}
connect(tcpPowerServer, SIGNAL(newConnection()), this, SLOT(receivePulsePowerWebData()));
void MainDialog::receivePulsePowerWebData()//12338
{
StatusContext->setText("begin to receive connection for power");
QString strHeadInfo,strData;
QString DataLen, strFileName;
int uiDataLen;
float ReceivePowerData[5];
if(!bStartServer) return;
QTcpSocket *clientConnection = tcpPowerServer->nextPendingConnection();
QDataStream in(clientConnection);
in.setVersion(QDataStream::Qt_4_0);
StatusContext->setText("begin to receive power");
if (clientConnection->bytesAvailable() < 50)
{
StatusContext->setText("Recieve Power Head is Less Than 50!");
clientConnection->disconnectFromHost();
if(clientConnection!=NULL)delete clientConnection;
return;
}
in >> strHeadInfo;
if(Parse(strHeadInfo,strFileName,DataLen))
{
uiDataLen=DataLen.toInt();
if (clientConnection->bytesAvailable() < uiDataLen)
{ StatusContext->setText("Recieve Power Content is less than uiDatalen!");
clientConnection->disconnectFromHost();
if(clientConnection!=NULL)delete clientConnection;
return;
}
in >> strData;
for(int i=0;i<5;i++)
ReceivePowerData=0.0;
QStringList liststrData = strData.split(",");
if(5!=liststrData.size())
{
StatusContext->setText("Power Data is less than 5!");
clientConnection->disconnectFromHost();
if(clientConnection!=NULL)delete clientConnection;
return;
}
QString arraystrData[5];
for(int i=0;i<5;i++)
{
arraystrData=liststrData.takeAt(i);
}
ReceivePowerData[0]=arraystrData[0].toInt();
ReceivePowerData[1]=arraystrData[1].toFloat();
ReceivePowerData[2]=arraystrData[2].toInt();
ReceivePowerData[3]=arraystrData[3].toFloat();
ReceivePowerData[4]=arraystrData[4].toFloat();
clientConnection->disconnectFromHost();
if(clientConnection!=NULL)delete clientConnection;
StatusContext->setText("receive power success");
QMutexLocker locker(&mutex);
mutex.lock();
QSqlQuery query;
query.exec("SELECT * FROM record1 where ShotNo=ReceivePowerData[0]");
if(query.next())
{
query.prepare("update record1 set AvePower = ?,PowerTLength=?,MaxInPower=?,MaxOutPower=? where ShotNo = ?");
query.addBindValue(ReceivePowerData[1]);
query.addBindValue(ReceivePowerData[2]);
query.addBindValue(ReceivePowerData[3]);
query.addBindValue(ReceivePowerData[4]);
query.addBindValue(ReceivePowerData[0]);
query.exec();
}else
{
query.exec(QString("insert into record1(ShotNo,AvePower,PowerTLength,MaxInPower,MaxOutPower) values(ReceivePowerData[0],ReceivePowerData[1],ReceivePowerData[2],ReceivePowerData[3],ReceivePowerData[4])"));
}
mutex.unlock();
}
}
客户端有connect请求的时候,服务器端没有执行receivePulsePowerWebData()这个函数。
下面是.h的原文
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QDialog>
#include <QMessageBox>
#include "ui_maindialog.h"
#include <QThread>
#include <QMutex>
#include <QWaitCondition>
#include <QtNetwork>
class QTcpServer;
class MainDialog : public QDialog, public Ui::lhcdwebDialog
{
Q_OBJECT
public:
MainDialog(QWidget *parent=0);
~MainDialog();
private slots:
void on_StartButton_clicked();
void on_StopButton_clicked();
void on_ExitButton_clicked();
void receivePulsePowerWebData();
void receivePulsePhaseWebData();
signals:
void error(int socketError, const QString &message);
// void error(QTcpSocket::SocketError socketError);
private:
QTcpServer *tcpPowerServer;
QTcpServer *tcpPhaseServer;
QString hostName;
quint16 port;
QMutex mutex;
QWaitCondition cond;
bool bStartServer;
};
#endif
[ 此贴被XChinux在2008-07-18 11:02重新编辑 ]