服务器端程序
#include "tcpserver.h"
#include "ui_tcpserver.h"
#include<QTcpServer>
#include<QTcpSocket>
#include<QString>
tcpserver::tcpserver(QWidget *parent) :
QWidget(parent),
ui(new Ui::tcpserver)
{
//服务器端程序
ui->setupUi(this);
server=new QTcpServer(this);
quint16 port=8888; //设置端口
server->listen(QHostAddress::Any,port); //设置监听主机ip与端口
connect(server,&QTcpServer::newConnection, //连接成功自动调用
[=]()
{
socket= server->nextPendingConnection(); //取套接字
QString ip=socket->peerAddress().toString();
quint16 port=socket->peerPort();
ui->textEditRead->setText(QString("[%1:%2]连接成功!").arg(ip).arg(port));
connect(socket,&QTcpSocket::readyRead,
[=]
{
char* data;
data=socket->readAll().data();//以字节数组形式全部读取,后转char*
ui->textEditRead->append(data); //追加
}
);
}
);
}
tcpserver::~tcpserver()
{
delete ui;
}
void tcpserver::on_buttonSend_clicked()
{
QString data=ui->textEditWrite->toPlainText();
socket->write(data.toUtf8().data());//写数据注意格式转换
}
void tcpserver::on_buttonClose_clicked()
{
socket->disconnectFromHost();//断开连接
socket->close();//关闭
}
客户端程序:
#include "tcpsocket.h"
#include "ui_tcpsocket.h"
#include<QTcpSocket>
#include<QString>
#include <QHostAddress>
#include<QDebug>
//#define cout qDebug();
tcpsocket::tcpsocket(QWidget *parent) :
QWidget(parent),
ui(new Ui::tcpsocket)
{
ui->setupUi(this);
socket =new QTcpSocket;
ui->lineEditIp->setText(QString("127.0.0.1"));//设置ip地址
ui->lineEditPort->setText(QString("8888"));//端口号
connect(socket,&QTcpSocket::readyRead, //当接收信息后自动调用,准备读
[=]()
{
char* data;
data=socket->readAll().data();//一次性读取
ui->textEditRead->append(data); //内容追加
}
);
connect(socket,&QTcpSocket::connected,
[=]
{
ui->textEditRead->setText(QString("连接成功!"));
});
}
tcpsocket::~tcpsocket()
{
delete ui;
}
void tcpsocket::on_buttonSend_clicked()
{
QString data=ui->textEditWrite->toPlainText(); //获取写的内容
socket->write(data.toUtf8().data());
}
void tcpsocket::on_buttonClose_clicked()
{
socket->disconnectFromHost();
socket->close();
}
void tcpsocket::on_buttonconnect_clicked() //创建连接
{
ip=ui->lineEditIp->text();
port=ui->lineEditPort->text().toInt();
socket->connectToHost(QHostAddress(ip),port); //
}
主程序:
#include "tcpserver.h"
#include "tcpsocket.h"
#include <QApplication>
#define QT_FATAL_WARNINGS
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
tcpserver w;
w.show();
w.setWindowTitle("服务器端");
tcpsocket w2;
w2.show();
w.setWindowTitle("客服端");
return a.exec();
}
qt tcp基本通信原理:
1.客户端设置:
socket->connectToHost(QHostAddress(ip),port); //与其他主机建立联系
通过connected判断是否连接成功
接收信息通过信号readyread操作,再使用readall读取信息
发送直接使用write;
2.服务器端:
建立服务器对象,设置监听对象
用newconnection判断是否连接成功
接收信息通过信号readyread操作,再使用readall读取信息
发送直接使用write;