• 7887阅读
  • 11回复

QTcpSocket编程中server无法收到client发送的数据 [复制链接]

上一主题 下一主题
离线yzpdsg
 

只看楼主 倒序阅读 楼主  发表于: 2011-10-05
我的原意是这样的:客户端请求连接,服务器发送"I'm ready",客户端收到后就发送数据,服务器收到后发送处理的结果。可是现在遇到的问题是客户端收到"I'm ready"后发送的数据服务器端显示没收到,不知是什么问题,请各位不吝赐教。我的代码如下:

//server.cpp

connect(tcpServer,SIGNAL(newConnection()),this,SLOT(sendReadyMessage()));
void MainWindow::sendReadyMessage()
{
    QByteArray block;
    QDataStream out(&block,QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_0);
    out<<tr("I'm ready");
    readWriteSocket = tcpServer->nextPendingConnection();
    readWriteSocket->write(block);//到这里没问题,客户端收到了"I'm ready"
    connect(readWriteSocket,SIGNAL(readyRead()),this,SLOT(readDomainNameAndSendIp()));
    connect(readWriteSocket, SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(displayError(QAbstractSocket::SocketError)));
    connect(readWriteSocket,SIGNAL(disconnected()),readWriteSocket,SLOT(deleteLater()));
}

void MainWindow::readDomainNameAndSendIp()
{
    QByteArray datagram = readWriteSocket->readAll();
    qDebug()<<"datagram="<<datagram.data();//这里读出来的内容是空
}


//client.cpp

connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readTcpMessage()));
void MainWindow::readTcpMessage()
{
    QDataStream in(tcpSocket);
    in.setVersion(QDataStream::Qt_4_0);
    QString messageReceived;
    in>>messageReceived;
    if(messageReceived == "I'm ready")
    {
        sendDomainNameAndWait();
    }
    else//如果不是"I'm ready,那就是服务器发送的处理结果"
        ui->dnsResult->setText(messageReceived);
}
离线yzpdsg

只看该作者 1楼 发表于: 2011-10-08
没人知道么?
离线myseemylife

只看该作者 2楼 发表于: 2011-10-09
我用QTcpserver 连接newConnection的信号,槽函数从来木有执行过~~~~已经开启事件循环了。。。。我比你还郁闷·~
蠢笨的愚钝~
离线yzpdsg

只看该作者 3楼 发表于: 2011-10-09
回 2楼(myseemylife) 的帖子
我觉得可能是你的端口不匹配。
离线myseemylife

只看该作者 4楼 发表于: 2011-10-10
回 3楼(yzpdsg) 的帖子
port在server和client两端都是相同的。。。
蠢笨的愚钝~
离线yzpdsg

只看该作者 5楼 发表于: 2011-10-11
回 4楼(myseemylife) 的帖子
莫非被防火墙阻挡了?
离线myseemylife

只看该作者 6楼 发表于: 2011-10-13
回 5楼(yzpdsg) 的帖子
连接的状态都是已连接上的。。。不会被阻挡吧 。。。。。newConnection信号就是不发出
蠢笨的愚钝~
离线ifantasy
只看该作者 7楼 发表于: 2011-10-18
确认下:1.服务器发送完“I'm ready”后有没有disconnectFromHost;
        2.客户端有没有收到了“I'm ready”?
        3.sendDomainNameAndWait();这是发送什么数据的?
离线myseemylife

只看该作者 8楼 发表于: 2011-10-18
回 7楼(ifantasy) 的帖子
弄好了~~~重装了一下QT。设置了下环境。。。。真纠结
蠢笨的愚钝~
离线walk

只看该作者 9楼 发表于: 2011-11-11
我也是一样的情况。
离线yzpdsg

只看该作者 10楼 发表于: 2011-11-23
重写了一下发送和接收的代码,好了。
离线zhichao_x
只看该作者 11楼 发表于: 2012-05-12
你是咋设置环境的啊  我也出现这问题了
快速回复
限100 字节
 
上一个 下一个