使用QT的网络编程需要在.pro文件里面添加:
QT +=network
- client
client负责的是向server发送数据,而server负责侦听端口和向端口发送数据。构建一个client对象,主要包括以下几个方面:
1. 创建套接字并实例化:
QTcpSocket *client;
this->client=new QTcpSocket;
2.将这个套接字链接至服务器相应端口
this->client->connectToHost("192.168.10.220",7002);
if(!this->client->waitForConnected(10000000))
{
std::cout<<"cannot connect the server!"<<std::endl;
return;
}
3.使用write函数向服务器写数据
this->client->write(bytedata,12);
4.与服务器断开
this->client->disconnectFromHost();
this->client->waitForDisconnected();
当socket的缓冲区有数据到来时,会有一个readready的信号,所以可以建立一个槽函数,来协助读取数据:
connect(m_tcpsocket,SIGNAL(readyRead()),this,SLOT(readmessage()),Qt::DirectConnection);//readyread为Qsignal成员函数
//发送对象 发送对象的信号 接收对象 槽函数(接收对象的成员)
//读取缓冲区用这个:
QByteArray datagram;
datagram=m_tcpsocket->readAll();
FixedData+=datagram;//QByteArray可以添加
- server
服务器除了需要使用QtcpSocket类之外,还需要使用QtcpServer类
1 创建server对象
m_tcpserver=new QTcpServer;
m_tcpsocket=new QTcpSocket;
m_tcpserver->listen(QHostAddress::Any,Port);//创建对象,侦听端口
connect(m_tcpserver,SIGNAL(newConnection()),this,SLOT(newConnect()),Qt::DirectConnection);//创建接收端口被访问信号的槽函数--
2 构建接收数据的socket
void TCPServer::newConnect()
{
m_tcpsocket = m_tcpserver->nextPendingConnection();
// QMessageBox::about(this,"notice","new connect");
connect(m_tcpsocket,SIGNAL(readyRead()),this,SLOT(readmessage()),Qt::DirectConnection);
//connect(m_tcpsocket,SIGNAL(disconnected()),this,SLOT(deleteLater()),Qt::DirectConnection);
}
大致的样子就是这样,类文件我上传到资源里面了,可以来这里下载: