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是无连接(无连接的含义是限制每次连接只处理一个请求 ...
随机推荐
- Android4.4 在Framework新增内部资源编译不过的问题
如果在Frameworks新增内部资源,并在Java代码中使用类似形式来引用资源:com.android.internal.R.layout.xxx,需要在frameworks/base/core/r ...
- 多结果集IMultipleResult接口
在某些任务中,需要执行多条sql语句,这样一次会返回多个结果集,在应用程序就需要处理多个结果集,在OLEDB中支持多结果集的接口是IMultipleResult. 查询数据源是否支持多结果集 并不是所 ...
- java常用API之基本类型包装类
基本类型包装类概述: 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的. 而程序开发中,我们需要把字符串数据,根据需求转换成指定的基本数据类型. 想实现字符串与基本数据之间转换,需 ...
- Html5的localStorage与sessionStorage五种循序渐进的使用方法
需求:本地记录用户上次输入的内容 使用关键技术:localStorage 第一步:使用jQuery的普通写法 1.JS代码 // 获取window的localStorage对象 var localS ...
- 在MAC上搭建python数据分析开发环境
最近工作转型到数据开发领域,想在本地搭建一个数据开发环境.自己有三年python开发经验,马上想到使用numpy.scipy.sklearn.pandas搭建一套数据开发环境. ubuntu的环境,百 ...
- css sticky footer布局
Sticky footers设计是最古老和最常见的效果之一,大多数人都曾经经历过.它可以概括如下:如果页面内容不够长的时候,页脚块粘贴在视窗底部:如果内容足够长时,页脚块会被内容向下推送.套路为:内容 ...
- 对于在gti操作遇见detached Head时
1.什么是detached HEAD 在git中,这是一个处于”游离“状态的标签 2.使用git branch <new_branch_name> <HEAD_code> 为这 ...
- JavaScript类型操作以及一些规范
类型检测 类型检测优先使用 typeof.对象类型检测使用 instanceof.null 或 undefined 的检测使用 == null. // string typeof variable = ...
- how to determint wether two column equals
question: How to determint wether two column equals? Answer: Table one:RecordId = 1,CommonId = 5,Ap ...
- POJ 3185 The Water Bowls 【一维开关问题 高斯消元】
任意门:http://poj.org/problem?id=3185 The Water Bowls Time Limit: 1000MS Memory Limit: 65536K Total S ...