Qt下TCP编程
一、服务器
1、声明一个QTcpServer对象
QTcpServer* serverListener;
2、new出对象
this->serverListener = new QTcpServer();
3、服务器监听
QHostAddress ipAddress(“192.168.1.1”);
quint16 ipPort = 8080;
serverListener->listen(ipAddress,ipPort);
4、声明一个QList对象用于存客户端
QList<QTcpSocket*> clientList;
5、连接信号与槽
QObject::connect(this->serverListener,SIGNAL(newConnection()),this,SLOT(newConnection()));//newConnection是自定义槽函数,用于管理clientList列表
6、实现newConnection函数,保存客户端至clientList
void TcpServer::newConnection()
{
QTcpSocket* serverClient = this->serverListener->nextPendingConnection();//new出客户端对象
this->clientList.append(serverClient);//保存
QObject::connect(serverClient,SIGNAL(readyRead()),this,SLOT(rcvData()));//当此客户端有数据时在自定义rcvData函数里接收
QObject::connect(serverClient,SIGNAL(disconnected()),this,SLOT(removeClient()));//当此客户端断开连接时,会发出disconnected信号,在自定义removeClient里去除客户端
}
7、实现removeClient函数,去除客户端
void TcpServer::removeClient()
{
for(int i=0;i<this->clientList.length();i++)
{
if(clientList.at(i)->socketDescriptor() == -1)//用于判断当前客户端是否有效
clientList.removeAt(i);
}
}
8、实现rcvData函数,接收数据
void TcpServer::rcvData()
{
QByteArray ba;
for(int i=0;i<this->clientList.length();i++)
{
if(clientList.at(i)->atEnd() == true)
continue;
ba = clientList.at(i)->readAll();
//
}
}
9、发送数据
clientList.at(n)->write(QByteArray ba);
10、停止
serverListener->close();
二、客户端
1、声明一个QTcpSocket对象
QTcpSocket* tcpClient;
2、new出对象
this->tcpClient = new QTcpSocket();
3、连接服务器,连接信号与槽
tcpClient->connectToHost("192.168.1.1","8080");
QObject::connect(this->tcpClient,SIGNAL(readyRead()),this,SLOT(rcvData()));//rcvData是自定义接收槽函数
4、实现rcvData函数,接收数据
void TcpClient::rcvData()
{
QByteArray ba = tcpClient->readAll();
}
5、发送数据
tcpClient->write(QByteArray ba);
6、关闭
tcpClient->close();
ps:软件开发流程

Qt下TCP编程的更多相关文章
- Linux下TCP网络编程与基于Windows下C#socket编程间通信
一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使s ...
- 【转】基于Linux下的TCP编程
http://blog.csdn.net/tigerjibo/article/details/6775534 一.Linux下TCP编程框架 TCP网络编程的流程包含服务器和客户端两种模式.服务器模式 ...
- Qt基于tcp协议网络编程
基于Qt网络编程: 基于tcp协议 c/s模式编程 所需要的类:QTcpServer QTcpSocket 利用qt基于tcp协议编写c/s模式程序: 两个类中的信号: QTcpServer : ne ...
- 【转】Qt下使用glut库
ps:这个说的很明白,尤其是win10环境下用mingw环境时编程时碰到的问题, 1.加 windows.h 2.在.pro 添加libs 博文地址:Qt下使用glut库 本人使用的环境 ...
- 初尝Windows 下批处理编程
本文叫“ 初尝Windows 下批处理编程”是为了延续上一篇“初尝 Perl”,其实对于博主而言批处理以及批处理编程早就接触过了. 本文包括以下内容 1.什么是批处理 2.常用批处理命令 3.简介批处 ...
- [C# 网络编程系列]专题五:TCP编程
转自:http://www.cnblogs.com/zhili/archive/2012/08/25/2656840.html 前言 前面专题的例子都是基于应用层上的HTTP协议的介绍, 现在本专题来 ...
- Linux下Socket编程的端口问题( Bind error: Address already in use )
Linux下Socket编程的端口问题( Bind error: Address already in use ) 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误 ...
- VC++或QT下 高精度 多媒体定时器
在VC编程中,用SetTimer可以定义一个定时器,到时间了,就响应OnTimer消息,但这种定时器精度太低了.如果需要精度更高一些的定时器(精 确到1ms),可以使用下面的高精度多媒体定时器进行代码 ...
- QT实现TCP通信服务器端和客户端(支持多个客户端)精简版
上星期接了个私活,工期两星期,报酬3000,写一个小软件,采集定向网络上的数据,并进行双向通信,捣鼓了两天,终于把QT中tcp通信这块调通了,找过N多例子,绝大部分都是基本的一个服务端一个客户端通信的 ...
随机推荐
- 扒一扒asp.net core mvc控制器的寻找流程
不太会排版,大家将就看吧. asp.net core mvc和asp.net mvc中都有一个比较有意思的而又被大家容易忽略的功能,控制器可以写在非Web程序集中,比如Web程序集:"MyW ...
- 使用PHP函数输出前一天的时间和后一天的时间
1.明确date()函数和time()函数的功能,其中time()函数是获取时间戳函数 2.输出前一天的当前时间: echo '一天之前的时间为:'.date('Y-m-d H:i:s',time() ...
- python的OS库和正则表达式库
摘自:http://blog.chinaunix.net/uid-16360955-id-3351990.html 作留存学习 1.常用内置函数:(不用import就可以直接使用) help(obj) ...
- linux下装locustio
升级Python版本 #python centOS6.8中默认安装的是2.6版本,因为我在安装到后面的时候报错Python版本较低,所以可以先把python版本升级到2.7: 直接在命令行输入:#wg ...
- Yii 2 的安装 之 踩坑历程
由于刚接触yii2 ,决定先装个试试:可是这一路安装差点整吐血,可能还是水平有限吧, 但还是想把这个过程分享出来,让遇到同样问题的同学有个小小的参考,好了言归正传!! <(~.~)> 下 ...
- Android UI开发第二十七篇——实现左右划出菜单
年前就想写左右滑动菜单,苦于没有时间,一直拖到现在,这篇代码实现参考了网上流行的SlidingMenu,使用的FrameLayout布局,不是扩展的HorizontalScrollView. 程序中自 ...
- 1280 前缀后缀集合(map)
1280 前缀后缀集合 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一个数组包含N个正整数,其中有些是重复的.一个前缀后缀集是满足 ...
- RabbitMQ中Queue详细介绍
新建队列 新建Queue时有很多参数,都代表什么含义,在这里解释一下: 前述:Rabbit版本为3.7.6 ErLang 版本为 21.0.1 Name 必填项,队列的名字,建议格式可以为多个字段,表 ...
- 2018.10.24-day3 python总结
昨日回顾:1.while2.运算符3.初始编码4.补充p2和p3的区别 Python2 (1) 今日学习目录1.整型 int() 2.布尔值 bool() 3.字符串详解 4. for循环
- PL/SQL 入门
1. 概述 PL/SQL(Procedure Language/SQL)是 Oracle 对 sql 语言的过程化扩展,指在 SQL 命令语言中增加了 过程处理语句(如分支,循环等),使 SQL 语言 ...