#include "tcpclient.h"
//#include "ui_tcpclient.h"
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;
}
TcpClient::~TcpClient()
{
delete ui;
}
void TcpClient::connectToServer(){
tcpSocket.connectToHost("202.117.10.54",1234);
ui->pushButton->setEnabled(false);
ui->pushButton_2->setEnabled(true);
}
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;
}
}
void TcpClient::closeConnection(){
tcpSocket.close();
ui->pushButton->setEnabled(true);
ui->pushButton_2->setEnabled(false);
}
void TcpClient::error(){
closeConnection();
}
这是一键实现一个服务器返回值的客户端程序 小弟想把它改成一键返回50个服务器返回值 但试了很多次都没成功
希望高手指点 最好把大概代码写点 小弟qt编程实在不怎么样 谢谢大家啦