• 4456阅读
  • 0回复

客户端程序查询服务器 [复制链接]

上一主题 下一主题
离线irei
 
只看楼主 倒序阅读 楼主  发表于: 2010-11-23
   客户端程序做的很简单

界面操作
TcpClient::TcpClient(QWidget *parent) :QDialog(parent),ui(new Ui::TcpClient)
{
    ui->setupUi(this);
    connect(ui->pushButton,SIGNAL(pressed()),this,SLOT(connectToServer()));
    connect(ui->pushButton_2,SIGNAL(pressed()),this,SLOT(closeConnection()));
    connect(&tcpSocket,SIGNAL(connected()),this,SLOT(sendRequest()));
    connect(&tcpSocket,SIGNAL(disconnected()),this,SLOT(connectionClosedByServer()));
    connect(&tcpSocket,SIGNAL(readyRead()),this,SLOT(update()));
    connect(&tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(error()));
    nextBlockSize=0;
}

实现按button1连接服务器 发送请求并最终返回缓冲区的内容

发送请求:
void TcpClient::sendRequest(){
    QString in="123";
    QByteArray block;
    QDataStream out(&block,QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_7);
    out<<quint16(0)<<in;
    out.device()->seek(0);
    out<<quint16(block.size()-sizeof(quint16));
    tcpSocket.write(block);
}

在界面上显示服务器返回到缓冲区中的内容
void TcpClient::update(){
    QDataStream in(&tcpSocket);
    QString meg;
    in.setVersion(QDataStream::Qt_4_7);
    forever {
           if (nextBlockSize == 0) {
               if (tcpSocket.bytesAvailable() < sizeof(quint16))
                   break;
               in >> nextBlockSize;
           }
           if (nextBlockSize == 0xFFFF) {
               closeConnection();
               break;
           }
           if (tcpSocket.bytesAvailable() < nextBlockSize)
               break;
           in>>meg;
           ui->textEdit->clear();
            ui->textEdit->append(meg);
           nextBlockSize = 0;
       }
}

我就是希望按下button1后可以用50个socket同时连接服务器并且在界面上显示50个服务器返回到缓冲区中的内容

头文件中定义了一个全局可以使用的socket 但是用循环的话始终都只有这么一个socket连接服务器 怎么实现建立50个socket呢 因为
下面的槽都没有参数可以传递 怎么调用才能实现啊

昨天小弟问过这个问题了 还望牛人解答啊 谢谢大家啦


快速回复
限100 字节
 
上一个 下一个