TCP(传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)。
客户端
widget_client.pro
QT += core gui network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = tcp_client
TEMPLATE = app
SOURCES += main.cpp\
widget.cpp
HEADERS += widget.h
FORMS += widget.ui
QMAKE_CXXFLAGS += -std=c++11
widget.ui文件
widget.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTcpSocket>
#include <QTextStream>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
//声明套接字 客户端只有一个通信套接字
QTcpSocket *client;
private slots:
void btnSendDataSlot();
void connectedSlot();
void readReadSlot();
void disconnectSlot();
};
#endif // WIDGET_H
widget.cpp文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
client = new QTcpSocket(this);
//设置窗口标记,始终处于顶端
setWindowFlags(Qt::WindowStaysOnTopHint);
//设置标题栏文字
setWindowTitle("client");
//定义ip地址和端口号
QString ip = "192.168.102.1";
int port = 8081;
//建立连接
client->connectToHost(ip,port);
connect(ui->pushButton_send,SIGNAL(clicked()),
this,SLOT(btnSendDataSlot()));
connect(client,SIGNAL(connected()),
this,SLOT(connectedSlot()));
}
Widget::~Widget()
{
delete ui;
//断开检测的信号槽
disconnect(client,SIGNAL(disconnected()),
this,SLOT(disconnectSlot()));
//如果打开则关闭
if(client->isOpen())
client->close();
}
void Widget::btnSendDataSlot()
{
//获取用户输入
QString msg = ui->lineEdit_send->text();
if(msg == "")
{
ui->textBrowser_recv->append("错误,请重新输入");
}
//方便下次输入
ui->lineEdit_send->clear();
//创建一个文本流对象
QTextStream output(client);
output << msg;
}
void Widget::connectedSlot()
{
//建立读取信息的信号槽连接
connect(client,SIGNAL(readyRead()),
this,SLOT(readReadSlot()));
}
void Widget::readReadSlot()
{
QTextStream input(client);
QString msg = input.readAll();
ui->textBrowser_recv->append(msg);
}
void Widget::disconnectSlot()
{
disconnect(client,SIGNAL(readyRead()),
this,SLOT(readReadSlot()));
}
本文仅供参考,如有不足之处望多多指正