一、服务器

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编程的更多相关文章

  1. Linux下TCP网络编程与基于Windows下C#socket编程间通信

    一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使s ...

  2. 【转】基于Linux下的TCP编程

    http://blog.csdn.net/tigerjibo/article/details/6775534 一.Linux下TCP编程框架 TCP网络编程的流程包含服务器和客户端两种模式.服务器模式 ...

  3. Qt基于tcp协议网络编程

    基于Qt网络编程: 基于tcp协议 c/s模式编程 所需要的类:QTcpServer QTcpSocket 利用qt基于tcp协议编写c/s模式程序: 两个类中的信号: QTcpServer : ne ...

  4. 【转】Qt下使用glut库

    ps:这个说的很明白,尤其是win10环境下用mingw环境时编程时碰到的问题, 1.加 windows.h 2.在.pro 添加libs     博文地址:Qt下使用glut库   本人使用的环境 ...

  5. 初尝Windows 下批处理编程

    本文叫“ 初尝Windows 下批处理编程”是为了延续上一篇“初尝 Perl”,其实对于博主而言批处理以及批处理编程早就接触过了. 本文包括以下内容 1.什么是批处理 2.常用批处理命令 3.简介批处 ...

  6. [C# 网络编程系列]专题五:TCP编程

    转自:http://www.cnblogs.com/zhili/archive/2012/08/25/2656840.html 前言 前面专题的例子都是基于应用层上的HTTP协议的介绍, 现在本专题来 ...

  7. Linux下Socket编程的端口问题( Bind error: Address already in use )

    Linux下Socket编程的端口问题( Bind error: Address already in use ) 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误 ...

  8. VC++或QT下 高精度 多媒体定时器

    在VC编程中,用SetTimer可以定义一个定时器,到时间了,就响应OnTimer消息,但这种定时器精度太低了.如果需要精度更高一些的定时器(精 确到1ms),可以使用下面的高精度多媒体定时器进行代码 ...

  9. QT实现TCP通信服务器端和客户端(支持多个客户端)精简版

    上星期接了个私活,工期两星期,报酬3000,写一个小软件,采集定向网络上的数据,并进行双向通信,捣鼓了两天,终于把QT中tcp通信这块调通了,找过N多例子,绝大部分都是基本的一个服务端一个客户端通信的 ...

随机推荐

  1. VLine[-1]=VLine[width]=128 数组的负一地址代表啥

    最近在调算法是,涉及到rgb转yuv数据的一个函数,出现了这种常见错误:如下 unsigned char *VLine = (new unsigned char[width+2]);//+1;     ...

  2. Android ADB 命令链接模拟器出现 daemon not running 解决方法

    用adb命令链接远程模拟器 有时候会遇到如下问题: C:Documents and SettingsAdministrator>adb connect 192.168.0.183 * daemo ...

  3. Python2.6升级Python2.7

    Python2.6升级2.7 由于Centos6系列自带的python版本为2.6.6,然而有很多应用需要依赖于python2.7来实现,所以有了这个升级的需求.升级原理很简单,无非就是下载.编译.安 ...

  4. 2588: Spoj 10628. Count on a tree

    2588: Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MBSubmit: 5766  Solved: 1374 ...

  5. 1804 小C的多边形

    1804 小C的多边形 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 小C偶然发现了一个奇妙的n个点的多边形.现在你需要给外圈的边标记上1~n-1,里圈的边也标记 ...

  6. border inset outset ,border-radius

    1. 例子: div{ width:256px; height:256px; border: 10px inset #f00; margin:0 auto; border-radius:255px; ...

  7. eclipse content assist 出现错误

    解决方法是,在Window->preference->java->editor>Content Assist->advanced ,将 time out 由50 ms 改 ...

  8. RabbitMQ安装篇

    一切不是自己实战,且跑不起来的程序都是在耍流氓! 先下载: http://www.erlang.org/downloads     erlang 包

  9. 人工智能-基于百度baidu-ai和图灵机器人实现学说话机器人

    本文引用了2个js文件,这里提供下CDN资源,! <script type="application/javascript" src="https://cdn.bo ...

  10. Python基础-文件的基本操作

    测试文件fansik内容如下:This is line 1This is line 2This is line 3This is line 4This is line 5This is line 6 ...