QT socket相关
#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相关的更多相关文章
- TCP/IP协议栈源码图解分析系列10:linux内核协议栈中对于socket相关API的实现
题记:本系列文章的目的是抛开书本从Linux内核源代码的角度详细分析TCP/IP协议栈内核相关技术 轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswang@gmail.com linu ...
- socket相关系统调用的调用流程
最近一直在读内核网络协议栈源码,这里以ipv4/tcp为例对socket相关系统调用的流程做一个简要整理,这些相关系统调用的内部细节虽然各有不同,但其调用流程则基本一致: 调用流程: (1)系统调用 ...
- socket相关的开机初始化分析
针对内核3.9 系统开启时,会使用init/main.c,然后再里面调用kernel_init(),在里面会再调用do_basic_setup(),调用do_initcalls(),调用do_one_ ...
- Qt 学习之路 2(73):Qt 线程相关类
Home / Qt 学习之路 2 / Qt 学习之路 2(73):Qt 线程相关类 Qt 学习之路 2(73):Qt 线程相关类 豆子 2013年11月26日 Qt 学习之路 2 7条评论 希 ...
- 一只简单的网络爬虫(基于linux C/C++)————socket相关及HTTP
socket相关 建立连接 网络通信中少不了socket,该爬虫没有使用现成的一些库,而是自己封装了socket的相关操作,因为爬虫属于客户端,建立套接字和发起连接都封装在build_connect中 ...
- Qt 学习之路 :Qt 线程相关类
希望上一章有关事件循环的内容还没有把你绕晕.本章将重新回到有关线程的相关内容上面来.在前面的章节我们了解了有关QThread类的简单使用.不过,Qt 提供的有关线程的类可不那么简单,否则的话我们也没必 ...
- QT socket网络通信
https://blog.csdn.net/u013007900/article/details/50411796 里主要讲解如何实现TCP和UDP的简单通信. socket简介在LINUX下进行网络 ...
- Socket 相关资料(随笔)
由于项目上的 http 请求量较大,项目上性能跟不上.于是考虑把 短连接的 http 换成 长连接的tcp 形式 试试效果. 先 研究了一下 长连接方式.就是要用到 socket 方面的知识. pac ...
- Qt socket制作一个简单的文件传输系统
服务器 用qt designer设计出服务器界面: 上代码: Server.pro #------------------------------------------------- # # Pro ...
随机推荐
- code first 创建和初始化数据库
1.前言 Code First是Entity Framework提供的一种新的编程模型.通过Code First我们可以在还没有建立数据库的情况下就开始编码,然后通过代码对象来生成数据库.当然我们在实 ...
- struts2学习记录
1.对于使用Struts2框架的应用而言,尽量不要让超级链接直接接到某个视图资源,因为这种方式增加了额外的风险.推荐将所有请求都发送给Struts框架,让该框架来处理用户请求,即使只是简单的超级链接. ...
- Linux设备模型(3)_Uevent
转自:http://www.wowotech.net/linux_kenrel/uevent.html 1. Uevent的功能 Uevent是Kobject的一部分,用于在Kobject状态发生改变 ...
- Swap in C C++ C# Java
写一个函数交换两个变量的值. C: 错误的实现: void swap(int i, int j) { int t = i; i = j; j = t; } 因为C语言的函数参数是以值来传递的(pass ...
- 一键删除.svn文件bat脚本
用过SVN或CVS版本控制工具的朋友,在享受着它们给我们带来的方便的同时,也许也在为这么一件事情苦恼: 如果某个目录在SVN或CVS版本控制工具的控制之下时.该目录下以及该子孙目录下都会有一个.svn ...
- 北京电子科技学院(BESTI)实验报告3
北京电子科技学院(BESTI)实验报告3 课程: 信息安全系统设计基础 班级:1452.1453 姓名:(按贡献大小排名)周恩德 .郑凯杰 学号:(按贡献大小排名)20145217 .201453 指 ...
- 关于activity的生命周期的随笔
在activity的生命周期中,我总是容易混淆,onstart和on resume ,on pause和onstop 原来这个都是一对的. onstart 对应 onstop ,意义在于使页面显示出来 ...
- node模块函数图解
已截图方式记录模块信息: HTTP模块: 对于网络返回处理状态封装了很多种,我已截图展现 以上状态也是在http协议中包含的状态. http函数: path模块:
- 【Oracle】oracle中快速判断某一日期是闰年或平年
)),' then '平年' else '闰年' end as isLeapYear from dual 第一步:取日期的年初日期:第二步:年初日期增加一个月即概念2月:第三步:取概念2月的最后一天的 ...
- Spark RDD 多文件输入
1.将多个文本文件读入一个RDD中 SparkConf conf=new SparkConf() .setMaster("local") .setAppName("sav ...