企业电子网站建设,怎么建立图片文件,h5做怎么做微网站,h5网页制作模板目录
1、相关的库和类
2、一些常用的API
3、帖子用到的完整核心代码#xff1a; 1、相关的库和类 Qt下使用tcp协议#xff0c;需要在工程的pro文件中添加#xff1a; QT network 需要添加network网络库之后#xff0c;才可以使用对应的类
客户端的类头文件#xf…目录
1、相关的库和类
2、一些常用的API
3、帖子用到的完整核心代码 1、相关的库和类 Qt下使用tcp协议需要在工程的pro文件中添加 QT network 需要添加network网络库之后才可以使用对应的类
客户端的类头文件 #include QTcpSocket 服务端的类头文件 #include QTcpServer 2、一些常用的API
客户端相关
连接服务器connectToHost virtual void connectToHost(const QString hostName, quint16 port, OpenMode mode ReadWrite, NetworkLayerProtocol protocol AnyIPProtocol); virtual void connectToHost(const QHostAddress address, quint16 port, OpenMode mode ReadWrite); 有两种写法但是前2个参数都是目标计算机的IP、Port其他值可以不屑都是有缺省值的
如 在头文件中添加 指针成员 QTcpSocket *m_client;在构造函数中就可以直接初始化然后调用connectToHost来连接服务器 m_client new QTcpSocket(this);
m_client-connectToHost(127.0.0.1,8898); 判断有没有连接上可以使用 waitForConnected默认等待30秒 if(m_client-waitForConnected()){ qDebug()conn ok;
}else{ qDebug()conn failm_client-errorString();
} 连接之后就需要收包发包的处理
发包函数write,有3种写法第三种其实相当于第一种不过使用了内联来处理使得调用的时候更加方便 qint64 write(const char *data, qint64 len);
qint64 write(const char *data);
inline qint64 write(const QByteArray data)
{ return write(data.constData(), data.size()); } 使用的时候可以在按钮槽里面直接发送内容 void TcpMainWindow::on_pushButton_clicked()
{ char buffer[] 码蚁软件欢迎您; qDebug()m_client-write(buffer,sizeof(buffer));
} 收包函数: read、readAll qint64 read(char *data, qint64 maxlen);
QByteArray read(qint64 maxlen); QByteArray readAll(); 一般在读取数据之前都会简单判断一下是否有数据可读用到函数
bytesAvailable返回长度大于0表示有数据可读 virtual qint64 bytesAvailable() const; 由于Qt中的收包是异步非阻塞的还得需要配合收包信号来处理一下才可以需要自定义槽来配合信号处理收包
收包信号 void readyRead(); 自定义一个槽函数来处理
如 void myRead(); // 收包槽 就可以在构造函数里面连接上服务端之后关联收包信号和自定义收包槽 connect(m_client,SIGNAL(readyRead()),this,SLOT(myRead())); 最后就可以在任何想要发包的地方使用对象来调用write函数发包即可
下一篇再把服务端部分也给简单整理一下。
3、帖子用到的完整核心代码
完整代码下载地址
点我下载 头文件
#ifndef TCPMAINWINDOW_H
#define TCPMAINWINDOW_H#include QMainWindow
#include QTcpSocketnamespace Ui {
class TcpMainWindow;
}class TcpMainWindow : public QMainWindow
{Q_OBJECTpublic:explicit TcpMainWindow(QWidget *parent 0);~TcpMainWindow();private slots:void myRead(); // 收包槽函数void on_pushButton_clicked();private:Ui::TcpMainWindow *ui;QTcpSocket *m_client;};#endif // TCPMAINWINDOW_H源文件
#include tcpmainwindow.h
#include ui_tcpmainwindow.h
#include QDebugTcpMainWindow::TcpMainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::TcpMainWindow)
{ui-setupUi(this);m_client new QTcpSocket(this);m_client-connectToHost(127.0.0.1,8898);if(m_client-waitForConnected()){qDebug()conn ok;connect(m_client,SIGNAL(readyRead()),this,SLOT(myRead()));}else{qDebug()conn failm_client-errorString();}
}TcpMainWindow::~TcpMainWindow()
{delete ui;
}void TcpMainWindow::myRead()
{QByteArray buffer m_client-readAll();qDebug()buffer;// 只是简单的打印输出还没有做解包处理
}void TcpMainWindow::on_pushButton_clicked()
{char buffer[] 码蚁软件欢迎您;qDebug()m_client-write(buffer,sizeof(buffer));
}