#include<QtNetwork/QTcpSocket>
#include<QtNetwork/QTcpServer>

1.服务器端

void About::init_tcp()
{
//server
this->tcpServer = new QTcpServer(this);
this->tcpSocket = new QTcpSocket(this);
if(!tcpServer->listen(QHostAddress::Any,))
{
qDebug()<<tcpServer->errorString();
close();
return;
}
connect(tcpServer,SIGNAL(newConnection()),this,SLOT(acceptConnection()));
}
void About::acceptConnection() {
tcpSocket = tcpServer->nextPendingConnection();
qDebug() << "a client connect!!";
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(revData()));
} void About::tcp_write(const char* data)
{
tcpSocket->write(data);
}

2. 客户端,加入自动重连

void About::init_tcp()
{
//client
QString ip = getIP();
this->tcpSocket = new QTcpSocket(this);
tcpSocket->abort();
tcpSocket->connectToHost(ip,);
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(revData())); connect(tcpSocket, SIGNAL(connected()), this, SLOT(OnSocketConnected()));
connect(tcpSocket, SIGNAL(disconnected()), this, SLOT(OnSocketDisconnected()));
connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(OnSocketError(QAbstractSocket::SocketError))); connect(&m_timer, SIGNAL(timeout()), this, SLOT(ConnectServer()));
m_timer.setInterval();
m_timer.start();
} QString About::getIP()
{
QString local_ip;
QString str;
QList<QHostAddress> list = QNetworkInterface::allAddresses();
foreach (QHostAddress address, list)
{
if(address.protocol() == QAbstractSocket::IPv4Protocol)
{
//IPv4地址
if (address.toString().contains("127.0."))
{
continue;
}
local_ip = address.toString();
}
}
if (local_ip == "127.0.0.1")
{
qDebug() << "get local ip fail";
return ;
}
else
{
return local_ip;
}
} void About::OnSocketConnected()
{
qDebug() << "connected to server";
m_bServerConnected = true;
} void About::OnSocketDisconnected()
{
qDebug() <<"Server disconnected";
m_bServerConnected = false;
} void About::OnSocketError(QAbstractSocket::SocketError error)
{
//emit ShowStatus(m_pTcpSocket->errorString());
qDebug() << tcpSocket->errorString();
} void About::ConnectServer()
{
if(!m_bServerConnected)
{
QString ip = getIP();
tcpSocket->connectToHost(ip, );
//m_pTcpSocket->waitForConnected(2000);//如果调用这句,界面会卡死
}
}
void About::revData()
{
//server
QString datas = tcpSocket->readAll();
qDebug()<<datas;
}
void About::tcp_write(const char* data)
{
tcpSocket->write(data);
}

QT socket相关的更多相关文章

  1. TCP/IP协议栈源码图解分析系列10:linux内核协议栈中对于socket相关API的实现

    题记:本系列文章的目的是抛开书本从Linux内核源代码的角度详细分析TCP/IP协议栈内核相关技术 轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswang@gmail.com linu ...

  2. socket相关系统调用的调用流程

    最近一直在读内核网络协议栈源码,这里以ipv4/tcp为例对socket相关系统调用的流程做一个简要整理,这些相关系统调用的内部细节虽然各有不同,但其调用流程则基本一致: 调用流程: (1)系统调用 ...

  3. socket相关的开机初始化分析

    针对内核3.9 系统开启时,会使用init/main.c,然后再里面调用kernel_init(),在里面会再调用do_basic_setup(),调用do_initcalls(),调用do_one_ ...

  4. Qt 学习之路 2(73):Qt 线程相关类

    Home / Qt 学习之路 2 / Qt 学习之路 2(73):Qt 线程相关类 Qt 学习之路 2(73):Qt 线程相关类  豆子  2013年11月26日  Qt 学习之路 2  7条评论 希 ...

  5. 一只简单的网络爬虫(基于linux C/C++)————socket相关及HTTP

    socket相关 建立连接 网络通信中少不了socket,该爬虫没有使用现成的一些库,而是自己封装了socket的相关操作,因为爬虫属于客户端,建立套接字和发起连接都封装在build_connect中 ...

  6. Qt 学习之路 :Qt 线程相关类

    希望上一章有关事件循环的内容还没有把你绕晕.本章将重新回到有关线程的相关内容上面来.在前面的章节我们了解了有关QThread类的简单使用.不过,Qt 提供的有关线程的类可不那么简单,否则的话我们也没必 ...

  7. QT socket网络通信

    https://blog.csdn.net/u013007900/article/details/50411796 里主要讲解如何实现TCP和UDP的简单通信. socket简介在LINUX下进行网络 ...

  8. Socket 相关资料(随笔)

    由于项目上的 http 请求量较大,项目上性能跟不上.于是考虑把 短连接的 http 换成 长连接的tcp 形式 试试效果. 先 研究了一下 长连接方式.就是要用到 socket 方面的知识. pac ...

  9. Qt socket制作一个简单的文件传输系统

    服务器 用qt designer设计出服务器界面: 上代码: Server.pro #------------------------------------------------- # # Pro ...

随机推荐

  1. code first 创建和初始化数据库

    1.前言 Code First是Entity Framework提供的一种新的编程模型.通过Code First我们可以在还没有建立数据库的情况下就开始编码,然后通过代码对象来生成数据库.当然我们在实 ...

  2. struts2学习记录

    1.对于使用Struts2框架的应用而言,尽量不要让超级链接直接接到某个视图资源,因为这种方式增加了额外的风险.推荐将所有请求都发送给Struts框架,让该框架来处理用户请求,即使只是简单的超级链接. ...

  3. Linux设备模型(3)_Uevent

    转自:http://www.wowotech.net/linux_kenrel/uevent.html 1. Uevent的功能 Uevent是Kobject的一部分,用于在Kobject状态发生改变 ...

  4. Swap in C C++ C# Java

    写一个函数交换两个变量的值. C: 错误的实现: void swap(int i, int j) { int t = i; i = j; j = t; } 因为C语言的函数参数是以值来传递的(pass ...

  5. 一键删除.svn文件bat脚本

    用过SVN或CVS版本控制工具的朋友,在享受着它们给我们带来的方便的同时,也许也在为这么一件事情苦恼: 如果某个目录在SVN或CVS版本控制工具的控制之下时.该目录下以及该子孙目录下都会有一个.svn ...

  6. 北京电子科技学院(BESTI)实验报告3

    北京电子科技学院(BESTI)实验报告3 课程: 信息安全系统设计基础 班级:1452.1453 姓名:(按贡献大小排名)周恩德 .郑凯杰 学号:(按贡献大小排名)20145217 .201453 指 ...

  7. 关于activity的生命周期的随笔

    在activity的生命周期中,我总是容易混淆,onstart和on resume ,on pause和onstop 原来这个都是一对的. onstart 对应 onstop ,意义在于使页面显示出来 ...

  8. node模块函数图解

    已截图方式记录模块信息: HTTP模块: 对于网络返回处理状态封装了很多种,我已截图展现 以上状态也是在http协议中包含的状态. http函数: path模块:

  9. 【Oracle】oracle中快速判断某一日期是闰年或平年

    )),' then '平年' else '闰年' end as isLeapYear from dual 第一步:取日期的年初日期:第二步:年初日期增加一个月即概念2月:第三步:取概念2月的最后一天的 ...

  10. Spark RDD 多文件输入

    1.将多个文本文件读入一个RDD中 SparkConf conf=new SparkConf() .setMaster("local") .setAppName("sav ...