基于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协议网络编程的更多相关文章

  1. 基于TCP协议网络编程

    1.TCP/IP是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路: 一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路来进行通信: 2.Java对基 ...

  2. Qt - 基于TCP的网络编程

    TCP(传输控制协议 Transmission Control Protocol) 可靠.面向数据流.面向连接  的传输协议.(许多应用层协议都是以它为基础:HTTP.FTP) 使用情况: 相比UDP ...

  3. (1)线程的同步机制 (2)网络编程的常识 (3)基于tcp协议的编程模型

    1.线程的同步机制(重点)1.1 基本概念 当多个线程同时访问同一种共享资源时可能会造成数据的覆盖和不一致等问题,此时就需要对线程之间进行协调和通信,该方式就叫线程的同步机制. 如: 2003年左右 ...

  4. (1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型

    1.网络编程的常识 目前主流的网络通讯软件有:微信.QQ.YY.陌陌.探探.飞信.阿里旺旺.... 在吗? 1.1 七层网络模型(熟悉) 为了保证数据传递的可靠安全等等,ISO(国际标准委员会组织)将 ...

  5. (1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制

    1.基于tcp协议的编程模型(重中之重)1.1 编程模型服务器: (1)创建ServerSocket类型的对象,并提供端口号: (2)等待客户端的连接请求,调用accept()方法: (3)使用输入输 ...

  6. Java:基于TCP协议网络socket编程(实现C/S通信)

    目录 一.前言:TCP原理简介 二.Socket编程通信 三.TCP服务器端(具体代码) 四.TCP客户端(具体代码) 五.通信效果演示 六."创意"机器人:价值一个亿的AI核心代 ...

  7. 基于TCP的网络编程

    HTTP协议,FTP协议等很多广泛应用的协议均基于TCP协议.TCP编程主要为C/S模式,客户端和服务器之间的程序设计存在较大差异. TCP编程框图 服务器调用socket().bind().list ...

  8. JavaSE——TCP协议网络编程(一)

    实现客户端与服务端的连接: 创建TCP服务端的 ServerSocket ServerSocket :此类实现服务器套接字.服务器套接字请求通过网络传入,基于该请求执行某些操作,然后可能向请求者返回结 ...

  9. Qt - 基于HTTP的网络编程

    HTTP(超文本传输协议 Hyper Text Transfer Protocol) 基于TCP/IP通信协议,属于应用层协议. 使用情况: HTTP是无连接(无连接的含义是限制每次连接只处理一个请求 ...

随机推荐

  1. Android4.4源码学习笔记

    1.StatusBar和Recents是如何建立联系的 在BaseStatusBar的start()函数通过getComponent(RecentsComponent.class)得到了Recents ...

  2. select, poll, epoll笔记

    看网络通信框架,netty, thrift,java nio等,最后都会通过select, poll, epoll或者socket等进行通信.查了些网页,总结一下.做个笔记 1. Socket单线程阻 ...

  3. String StringBuffer StringBuilder对比

    1.相同点 三者都可以用来存储字符串类型数据. 2.不同点 String类型对象内容不可变,每变化一次都会创建一个新的对象. StringBuiler与StringBuffer的内容与长度均可以发生变 ...

  4. 吐槽中小民营IT企业管理七宗罪

    傲慢.妒忌.暴怒.懒惰.贪婪.贪食及色欲,电影<七宗罪>中借七个典型的命案告诉我们,人性中最丑陋的七大恶行.在实际的工作中自己对企业的经营和日常管理有了一些更深刻的认识,偏偏自己又是一个很 ...

  5. 【起航计划 037】2015 起航计划 Android APIDemo的魔鬼步伐 36 App->Service->Remote Service Binding AIDL实现不同进程间调用服务接口 kill 进程

    本例和下个例子Remote Service Controller 涉及到的文件有RemoteService.java ,IRemoteService.aidl, IRemoteServiceCallb ...

  6. 清理SharePoint 2010的SQL Server 2008 R2日志数据库的方法

    最近发现Sharepoint的数据库磁盘经常满,导致无法保存数据,经检查发现数据磁盘的所有日志文件远远大于数据文件,因此需要收缩日志文件,一开始利用图形化的收缩文件方式,只有收缩数据文件的大小,对于日 ...

  7. 网络防火墙之iptables的前世今生和归宿

    任何事物都有一个从无到有,再归于无的过程.是的,我这里用了一个绝对词:任何. 防火墙 在计算机领域中,防火墙(英文:Firewall)是一项协助确保信息安全的设备,会依照特定的规则,允许或是限制传输的 ...

  8. OpenGL总结

    最近2D转向3D,也从固定管线转到了可编程管线,有些细节的东西记录一下. Geometry Shader Geometry Shader从Vertex Shader中获取数据,向Fragment Sh ...

  9. 为什么有的系统的事务码BSP_WD_CMPWB看不见Enhance Component这个按钮

    我的同事问我,为什么有的系统看不到下图7的按钮? 对比两张图里工具栏的差异. 答案 这是因为在图2(看不见Enhance Component按钮)的系统里,该系统的类型被设置为"SAP&qu ...

  10. 319. Bulb Switcher (Math, Pattern)

    There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every ...