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;

  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();

时间: 2025-01-06 06:35:45

Qt下TCP编程的相关文章

Qt下UDP编程学习

一.概述: #include <QUdpSocket> QUdpSocket类继承自QAbstractSocket,该类中的所有函数都是可重入的(reentrent). 二.介绍: QUdpSocket公有类型: enum BindFlag {ShareAddress, DontShareAddress, ReuseAddressHint, DefaultForPlatform } flags BindMode QUdpSocket公共函数: QUdpSocket ( QObject * pa

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

一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使socket处于被动的监听模式,并为该  socket  建立一个输入数据队列,将到达的服务器, 请求保存在此队列中,直到程序处理他们. Accept():让服务器接收客户的连接请求. Connect():客户端使用connect函数来配置 socket并与远端服务器建立一个 TCP 连接. Clos

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

一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使socket处于被动的监听模式,并为该  socket  建立一个输入 数据队列,将到达的服务器, 请求保存在此队列中,直到程序处理他们. Accept():让服务器接收客户的连接请求. Connect():客户端使用connect函数来配置 socket并与远端服务器建立一个 TCP 连接. Clo

Linux下socket编程,附带tcp例子

1.网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用(Solaris门和Sun RPC) 但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们解决了这个问

QT开发(六十五)——QT样式表编程实例

QT开发(六十五)--QT样式表编程实例 一.QComboBox组合框样式定制 1.基本定义 QComboBox  {     border: 1px solid gray;     border-radius: 3px;     padding: 1px 2px 1px 2px;  # 针对于组合框中的文本内容     min-width: 9em;   # 组合框的最小宽度 } QComboBox::drop-down {     subcontrol-origin: padding;   

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

上星期接了个私活,工期两星期,报酬3000,写一个小软件,采集定向网络上的数据,并进行双向通信,捣鼓了两天,终于把QT中tcp通信这块调通了,找过N多例子,绝大部分都是基本的一个服务端一个客户端通信的,而且都不完整,甚至有些还发完数据就关闭了,还是自己亲自操刀先做了个TCP小工具,基本的需求搞定.window.open('http://www.qtcn.org/bbs/attachment/Mon_1309/44_110085_04c150bde9df7ee.jpg?67');" style=&

Linux下Socket编程

http://blog.chinaunix.net/uid-20733992-id-3450058.html 原文地址:Linux下Socket编程 作者:yulianliu1218 Linux下Socket编程 什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程,必须理解Socket接口. Socket接口设计者最先是将接口放在Unix操作系统里面

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

Linux下Socket编程的端口问题( Bind error: Address already in use ) 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误: Bind error: Address already in use 虽然用Ctrl+C强制结束了进程,但错误依然存在,用netstat -an |grep 5120和ps aux |grep 5120都还能看到刚才用Ctrl+C“强制结束”了的进程,端口还是使用中,只好每次用kill结束进程,

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

在VC编程中,用SetTimer可以定义一个定时器,到时间了,就响应OnTimer消息,但这种定时器精度太低了.如果需要精度更高一些的定时器(精 确到1ms),可以使用下面的高精度多媒体定时器进行代码优化,可以达到毫秒级的精度,而且使用方便.先要包含头文件"mmsystem.h"和库文 件"winmm.lib". 虽然Win95下可视化开发工具如VC.Delphi.C++   Builder等都有专用的定时器控件Timer,而且使用很方便,可以实现一定的定时功能,但