TCP编程需要用到两个类:
1、QTcpServer-----用来实现服务器的 监听。
2、QTcpSocket------实现 套节字 类, 有消息的封装,可以读取和写入。
pro文件中加入QT += core gui network
服务器:
QTcpSocket
QTcpServer 两个头
1、开启服务器:QTcpServer对象,用listen()方法;
tcpServer->listen(QHostAddress::LocalHost,ui->lineEdit_port->text().toUInt()) //listen(QHostAddress::Any,8888)
2、当有客户端连接到服务器时,系统会接收到newConnection信号,需要在对应的槽函数中获取用于通信的套接字(QTcpServer的nextPendingConnection()函数获取套接字)。
tcpSocket = tcpServer->nextPendingConnection();
3、客户端有数据过来,则会产生一个readyRead信号,从对应的槽函数中通过套接字的readAll()等相关函数读取数据。
buf = QString(tcpSocket->readAll());
4、通过套接字的write()函数向客户端发送数据。
tcpSocket->write(ui->lineEdit_send->text().toLocal8Bit().data());
客户端:
1、创建QTcpSocket对象,并用connectToHost()函数通过IP和端口号连接服务器。
tcpSocket = new QTcpSocket(this);
tcpSocket->connectToHost(ui->lineEdit_ip->text(),ui->lineEdit_port->text().toUInt());
2、客户端成功连接上服务器,系统会产生connected信号。(所以需要将信号和槽函数进行绑定)
connect(tcpSocket,SIGNAL(connected()),this,SLOT(connected_slot()));
3、客户端收到服务器发送来的数据,会产生readyRead信号,在connected信号对应的槽函数中,将readyRead信号和对应的槽函数进行绑定。
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_slot()));
4、通过套接字对象读取服务器发来的数据。(用readall()等函数)
tcpSocket->readAll();
5、通过套接字向服务器发送数据。(用write()函数)
tcpSocket->write(ui->lineEdit_send->text().toLocal8Bit().data());