Qt基于tcp协议网络编程
基于Qt网络编程:
基于tcp协议 c/s模式编程
所需要的类:QTcpServer QTcpSocket
利用qt基于tcp协议编写c/s模式程序:
两个类中的信号:
QTcpServer :
newConnection()
QTcpSocket:
readyRead()
connected()
disconnected()
服务器端程序步骤:QTcpServer QTcpSocket
1、.h中声明一个监听套接字和通信套接字
.cpp构造函数中:
实例化监听套接字
2、处于监听状态
3、绑定信号onNewConnection()和槽函数
槽函数:获取通信套接字
4、在onNewConnection()信号槽函数:
(1)接收套接字
(2)readyRead()和槽函数
接收数据
(3)disconnected()和槽函数
关闭通信套接字
5、收/发数据
客户端程序步骤:QTcpSocket
1、.h中声明一个通信套接字
.cpp的构造函数中 实例化套接字
2、发出链接请求
3、绑定两个信号和槽函数
connected():链接成功后发出信号
槽函数中:获取链接已经成功信息
readyRead():数据接收发出该新号
槽函数:接收数据
disconnected()和槽函数
关闭通信套接字
4、收/发送数据
案例:通过客户端给服务器发送一个字符串,服务器收到显示
服务器给客户端发送一个字符串,客户端收到后显示
增加图形界面,实现聊天功能
客户端和服务器之间通信,发送任意数据协议包
工程的参考代码:
服务器端:
widget.h文件内容:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
QTcpServer *tcpSever;
QTcpSocket *tcpSocket;
public slots:
void onNewconnection();
void onReadyRead();
void onDisconnect();
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QHostAddress>
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
tcpSever = new QTcpServer(this);
QHostAddress ipAddr("127.0.0.1");
tcpSever->listen(ipAddr,6565);
connect(tcpSever,SIGNAL(newConnection()),this,SLOT(onNewconnection()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::onNewconnection()
{
tcpSocket = tcpSever->nextPendingConnection();
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(onReadyRead()));
connect(tcpSocket,SIGNAL(disconnected()),this,SLOT(onDisconnect()));
qDebug()<<"new connection";
}
void Widget::onReadyRead()
{
char buf[1024] = {0};
tcpSocket->read(buf,sizeof(buf) - 1);
qDebug()<<buf;
}
void Widget::onDisconnect()
{
tcpSocket->close();
}
main.cpp文件内容:
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
客户端:
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTcpSocket>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
QTcpSocket *socketClient;
public slots:
void onConnect();
private slots:
void on_btnSend_clicked();
void on_readyRead();
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
socketClient = new QTcpSocket(this);
socketClient->connectToHost("127.0.0.1",6565);
connect(socketClient,SIGNAL(connected()),this,SLOT(onConnect()));
connect(socketClient,SIGNAL(readyRead()),this,SLOT(on_readyRead()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::onConnect()
{
qDebug()<<"connected succesfully";
}
void Widget::on_btnSend_clicked()
{
socketClient->write("hello world");
}
void Widget::on_readyRead()
{
}
main.cpp代码如下:
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
Qt基于tcp协议网络编程的更多相关文章
- 基于TCP协议网络编程
1.TCP/IP是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路: 一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路来进行通信: 2.Java对基 ...
- Qt - 基于TCP的网络编程
TCP(传输控制协议 Transmission Control Protocol) 可靠.面向数据流.面向连接 的传输协议.(许多应用层协议都是以它为基础:HTTP.FTP) 使用情况: 相比UDP ...
- (1)线程的同步机制 (2)网络编程的常识 (3)基于tcp协议的编程模型
1.线程的同步机制(重点)1.1 基本概念 当多个线程同时访问同一种共享资源时可能会造成数据的覆盖和不一致等问题,此时就需要对线程之间进行协调和通信,该方式就叫线程的同步机制. 如: 2003年左右 ...
- (1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型
1.网络编程的常识 目前主流的网络通讯软件有:微信.QQ.YY.陌陌.探探.飞信.阿里旺旺.... 在吗? 1.1 七层网络模型(熟悉) 为了保证数据传递的可靠安全等等,ISO(国际标准委员会组织)将 ...
- (1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制
1.基于tcp协议的编程模型(重中之重)1.1 编程模型服务器: (1)创建ServerSocket类型的对象,并提供端口号: (2)等待客户端的连接请求,调用accept()方法: (3)使用输入输 ...
- Java:基于TCP协议网络socket编程(实现C/S通信)
目录 一.前言:TCP原理简介 二.Socket编程通信 三.TCP服务器端(具体代码) 四.TCP客户端(具体代码) 五.通信效果演示 六."创意"机器人:价值一个亿的AI核心代 ...
- 基于TCP的网络编程
HTTP协议,FTP协议等很多广泛应用的协议均基于TCP协议.TCP编程主要为C/S模式,客户端和服务器之间的程序设计存在较大差异. TCP编程框图 服务器调用socket().bind().list ...
- JavaSE——TCP协议网络编程(一)
实现客户端与服务端的连接: 创建TCP服务端的 ServerSocket ServerSocket :此类实现服务器套接字.服务器套接字请求通过网络传入,基于该请求执行某些操作,然后可能向请求者返回结 ...
- Qt - 基于HTTP的网络编程
HTTP(超文本传输协议 Hyper Text Transfer Protocol) 基于TCP/IP通信协议,属于应用层协议. 使用情况: HTTP是无连接(无连接的含义是限制每次连接只处理一个请求 ...
随机推荐
- 08.StreamReader和StreamWrite的学习
StreamReader和StreamWrite是用来操作字符的 namespace _21.对StreamReader和StreamWriter的学习 { class Program { stati ...
- 亲测,很有效的忽略SSL证书方法
1.在httpclient发起请求时,有时会出现下面这种情况 你的日志中出现有关SSL的异常,javax.net.ssl.SSLPeerUnverifiedException: peer not au ...
- 优化代码CPU层面
今天在看<支撑处理器的技术>,其中,讲到了CPU流水线.在指令之间,如果下一条指令,需要用到上一条指令的结果,会影响到流水线的执行.书上给出了几种解决方案,一个是在指令中间插入一下无关的指 ...
- 用于模式匹配的String方法和RegExp方法
上一节总结了创建正则表达式的语法,这一篇笔者总结了用于模式匹配的String四个方法:search().replace().match().split()以及用于模式匹配的RegExp两个方法exec ...
- C# 读写xml、excel、word、ppt、access
C# 读写xml.excel.word.access 这里只是起个头,不做深入展开,方便以后用到参考 读写xml,主要使用.net 的xml下的document using System;using ...
- Please, configure Web Facet first!idea报这错的解决办法!!
Please, configure Web Facet first!idea报这错的解决办法!! 今天在idea导入用eclipse的项目,然后运行项目的时候报这个错, 看下图 网上找了好多都没解决, ...
- vue使用qrcode生成二维码,可以自定义大小
1,qrcanvas-vue插件,https://gera2ld.github.io/qrcanvas-vue/#logo.只支持像素大小的二维码 2,qrcode支持移动端自定义大小二维码 &quo ...
- Python进阶篇四:Python文件和流
摘要: Python对于文件和流的操作与其他编程语言基本差不多,甚至语句上比其他语言更为简洁.文件和流函数针对的对象除了这两者之外还有,类文件(file-like),即python中只支持读却不支持写 ...
- css3制作有动画效果的面板
.show-panel .slide-panels{ right: 0px; } .slide-panels{ z-index: 101; background: #fff; position: fi ...
- js中实现多态
最近读到一本书<JavaScript设计模式与开发实践>上,讲到js的多态,我在JavaScript高级程序编程里貌似都没有见过关于这个的详细讲解,所以想问问大家有没有什么推荐的文章或者博 ...