TCP即Transmission Control Protocol,传输控制协议。与UDP不同,它是面向连接和数据流的可靠传输协议。也就是说,它能使一台计算机上的数据无差错的发往网络上的其他计算机,所以当要传输大量数据时,我们选用TCP协议。 TCP协议的程序使用的是客户端/服务器模式,在Qt中提供了QTcpSocket类来编写客户端程序,使用QTcpServer类编写服务器端程序。我们在服务器端进行端口的监听,一旦发现客户端的连接请求,就会发出newConnection()信号,我们可以关联这个信号到我们自己的槽函数,进行数据的发送。而在客户端,一旦有数据到来就会发出readyRead()信号,我们可以关联此信号,进行数据的接收。其实,在程序中最难理解的地方就是程序的发送和接收了,为了让大家更好的理解,我们在这一节只是讲述一个传输简单的字符串的例子,在下一节再进行扩展,实现任意文件的传输。
服务器端程序设计流程:
1、在服务器端使用listen()函数监听本地端口
bool QTcpServer::listen ( const QHostAddress & address = QHostAddress::Any,quint16 port = 0 )
2、发现客户端的连接请求,发出newConnection()信号,可以关联这个信号到我们自己的槽函数进行数据的 发送
connect(tcpServer,SIGNAL(newConnection()),this,SLOT(sendMessage()))
客户端程序设计流程:
1、在客户端使用connectToHost()连接到服务器,请求连接,等待服务器的响应
void QAbstractSocket::connectToHost ( const QString & hostName , quint16 port , OpenMode openMode = ReadWrite )
2、有数据到来就会发出readyRead()信号,我们可以关联此信号,进行数据的接收
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readMessage()));
一、服务器端。
在服务器端的程序中,我们监听本地主机的一个端口,这里使用6666,然后我们关联newConnection()信号与自己写的sendMessage()槽函数。就是说一旦有客户端的连接请求,就会执行sendMessage()函数,在这个函数里我们发送一个简单的字符串。1.我们新建Qt4 Gui Application,工程名为“tcpServer”,选中QtNetwork模块,Base class 选择QWidget。(说明:如果一些Qt Creator版本没有添加模块一项,我们就需要在工程文件tcpServer.pro中添加一行代码:QT += network)2.我们在widget.ui的设计区添加一个Label,更改其objectName为statusLabel,用于显示一些状态信息。如下:
3.在widget.h文件中做以下更改。 添加头文件:#include 添加private对象:QTcpServer *tcpServer; 添加私有槽函数: private slots: void sendMessage();4.在widget.cpp文件中进行更改。 在其构造函数中添加代码: tcpServer = new QTcpServer(this); if(!tcpServer->listen(QHostAddress::LocalHost,6666)) { //监听本地主机的6666端口,如果出错就输出错误信息,并关闭 qDebug() << tcpServer->errorString(); close(); } connect(tcpServer,SIGNAL(newConnection()),this,SLOT(sendMessage())); //连接信号和相应槽函数 我们在构造函数中使用tcpServer的listen()函数进行监听,然后关联了newConnection()和我们自己的sendMessage()函数。 下面我们实现sendMessage()函数。 void Widget::sendMessage() { QByteArray block; //用于暂存我们要发送的数据 QDataStream out(&block,QIODevice::WriteOnly); //使用数据流写入数据 out.setVersion(QDataStream::Qt_4_6); //设置数据流的版本,客户端和服务器端使用的版本要相同 out<<(quint16) 0; out< out.device()->seek(0); out<<(quint16) (block.size() – sizeof(quint16)); QTcpSocket *clientConnection = tcpServer->nextPendingConnection(); //我们获取已经建立的连接的子套接字 connect(clientConnection,SIGNAL(disconnected()),clientConnection, SLOT(deleteLater())); clientConnection->write(block); clientConnection->disconnectFromHost(); ui->statusLabel->setText(“send message successful!!!”); //发送数据成功后,显示提示 } 这个是数据发送函数,我们主要介绍两点:(1)为了保证在客户端能接收到完整的文件,我们都在数据流的最开始写入完整文件的大小信息,这样客户端就可以根据大小信息来判断是否接受到了完整的文件。而在服务器端,我们在发送数据时就要首先发送实际文件的大小信息,但是,文件的大小一开始是无法预知的,所以我们先使用了out<<(quint16) 0;在block的开始添加了一个quint16大小的空间,也就是两字节的空间,它用于后面放置文件的大小信息。然后out<seek(0);返回到block的开始,加入实际的文件大小信息,也就是后面的代码,它是实际文件的大小:out<<(quint16) (block.size() – sizeof(quint16));(2)在服务器端我们可以使用tcpServer的nextPendingConnection()函数来获取已经建立的连接的Tcp套接字,使用它来完成数据的发送和其它操作。比如这里,我们关联了disconnected()信号和deleteLater()槽函数,然后我们发送数据 clientConnection->write(block); 然后是clientConnection->disconnectFromHost();它表示当发送完成时就会断开连接,这时就会发出disconnected()信号,而最后调用deleteLater()函数保证在关闭连接后删除该套接字clientConnection。 5.这样服务器的程序就完成了,我们先运行一下程序。 二、客户端。 我们在客户端程序中向服务器发送连接请求,当连接成功时接收服务器发送的数据。1. .我们新建Qt4 Gui Application,工程名为“tcpClient”,选中QtNetwork模块,Base class选择QWidget。 2,我们在widget.ui中添加几个标签Label和两个Line Edit以及一个按钮Push Button。 其中“主机”后的Line Edit的objectName为hostLineEdit,“端口号”后的为portLineEdit。 “收到的信息”标签的objectName为messageLabel 。3.在widget.h文件中做更改。 添加头文件:#include 添加private变量: QTcpSocket *tcpSocket; QString message; //存放从服务器接收到的字符串 quint16 blockSize; //存放文件的大小信息 添加私有槽函数: private slots: void newConnect(); //连接服务器 void readMessage(); //接收数据 void displayError(QAbstractSocket::SocketError); //显示错误4.在widget.cpp文件中做更改。 (1)在构造函数中添加代码: tcpSocket = new QTcpSocket(this); connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readMessage())); connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)), this,SLOT(displayError(QAbstractSocket::SocketError))); 这里关联了tcpSocket的两个信号,当有数据到来时发出readyRead()信号,我们执行读取数据的readMessage()函数。当出现错误时发出error()信号,我们执行displayError()槽函数。 (2)实现newConnect()函数。 void Widget::newConnect() { blockSize = 0; //初始化其为0 tcpSocket->abort(); //取消已有的连接 tcpSocket->connectToHost(ui->hostLineEdit->text(), ui->portLineEdit->text().toInt()); //连接到主机,这里从界面获取主机地址和端口号 } 这个函数实现了连接到服务器,下面会在“连接”按钮的单击事件槽函数中调用这个函数。 (3)实现readMessage()函数。 void Widget::readMessage() { QDataStream in(tcpSocket); in.setVersion(QDataStream::Qt_4_6); //设置数据流版本,这里要和服务器端相同 if(blockSize==0) //如果是刚开始接收数据 { //判断接收的数据是否有两字节,也就是文件的大小信息 //如果有则保存到blockSize变量中,没有则返回,继续接收数据 if(tcpSocket->bytesAvailable() < (int)sizeof(quint16)) return; in >> blockSize; } if(tcpSocket->bytesAvailable() < blockSize) return; //如果没有得到全部的数据,则返回,继续接收数据 in >> message; //将接收到的数据存放到变量中 ui->messageLabel->setText(message); //显示接收到的数据 } 这个函数实现了数据的接收,它与服务器端的发送函数相对应。首先我们要获取文件的大小信息,然后根据文件的大小来判断是否接收到了完整的文件。 (4)实现displayError()函数。 void Widget::displayError(QAbstractSocket::SocketError) { qDebug() << tcpSocket->errorString(); //输出错误信息 } 这里简单的实现了错误信息的输出。 (5)我们在widget.ui中进入“连接”按钮的单击事件槽函数,然后更改如下。 void Widget::on_pushButton_clicked() //连接按钮 { newConnect(); //请求连接 } 这里直接调用了newConnect()函数。5.我们运行程序,同时运行服务器程序,然后在“主机”后填入“localhost”,在“端口号”后填入“6666”,点击“连接”按钮,效果如下。 可以看到我们正确地接收到了数据。因为服务器端和客户端是在同一台机子上运行的,所以我这里填写了“主机”为“localhost”,如果你在不同的机子上运行,需要在“主机”后填写其正确的IP地址。 到这里我们最简单的TCP应用程序就完成了,在下一节我们将会对它进行扩展,实现任意文件的传输。
你可能感兴趣的:(qt,tcp,网络,编程,服务器,signal)
关注正向须与坚定规则并行
飞鱼和唱歌的沙滩
【中原焦点团队网络初级第28期2021.06.18坚持分享第14天关注正向须与坚定规则并行规则建立的前提:相对良好的关系1、规则需要双方共同商定2、规则要有底线、具体、精简、考虑到可行性,最后要书面化(家庭、班级公约);3、规则的制定要考虑年龄,关系,性格,既往模式等;4、规则的执行是双方面的,并在后续经协商调整。切忌:贪心、朝令夕改
域名解析DNS服务
运维小白。。
服务器 网络 运维 linux 学习
DNS服务基础知识DNS:DomainNameSystem(域名系统)DNS是互联网上解决网络中机器命名的一种系统。在网络中,一台主机去访问另外一台主机时,必须要知道目标主机的IP地址,虽然网络上的节点都可以用IP地址来标识,并且可以通过IP地址被访问。但对于自然人而言,一组组由数字组成的IP地址,是难以被理解和记忆的。于是设计出了域名系统,用一组有意义的字符来表示某个特定主机或某个网络,再将网络
TLS连接的握手过程
aFakeProgramer
# 通信管理——COM TLS
TLS(传输层安全协议)握手过程是客户端(如浏览器)和服务器(如网站)之间建立安全连接的一系列步骤。以下是TLS握手的详细过程:图片来自Vector1.客户端问候(ClientHello):客户端向服务器发送“ClientHello”消息,包含支持的TLS版本、加密套件列表和一个随机数(ClientRandom)。2.服务器问候(ServerHello):服务器回复“ServerHello”消息,
VBto Converter代码转换工具最新V2.89版
中游鱼
原创 VB 补丁 .net microsoft vb6 代码转换
VBtoConverter代码转换工具最新V2.89版VBtoConverter是来自国外的一款简单实用,功能强大的VB6源代码转换工具。作为一款实用的编程工具软件,可以将MicrosoftVisualBasic6.0project(包括源代码)转换成MSVC++MFC,VC++.NET(CLR),VBNET,C#,J#,BorlandC++Builder,BorlandDelphi源代码文件。可
Github 2024-08-28 C开源项目日报 Top9
老孙正经胡说
github c语言 开源 Github趋势分析 开源项目 Python Golang
根据GithubTrendings的统计,今日(2024-08-28统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下:开发语言项目数量C项目9Python项目2C++项目1Redis-内存数据库和数据结构服务器创建周期:5411天开发语言:C协议类型:BSD3-Clause“New”or“Revised”LicenseStar数量:62974个Fork数量:23165次关注人数:62
02 使用 LSTM 进行时间序列预测
柒 魅。
时间序列预测 lstm 人工智能 rnn
深度学习入门:使用LSTM进行时间序列预测引言深度学习在时间序列预测中展现出了强大的能力,尤其是长短期记忆(LSTM)网络。本文将为深度学习初学者介绍如何使用LSTM网络进行时间序列预测。我们将从基础知识讲起,提供代码示例,并解释每一步的技术细节。希望通过本文,大家能对LSTM有一个初步的了解,并能够在自己的项目中应用。1.什么是LSTM?LSTM(长短期记忆网络)是一种特殊的递归神经网络(RNN
陪你一起走过高中三年|629|哥哥来上班
璇豆的天空
高考结束后,会有很长的时间来放松休息,哥哥今天来试着上班,体验一下工作的感觉。第一个任务是完成多台电脑共享一台打印机的链接。之前这些事情都没接触过,我便建议哥哥去网络上找方法。首先解决的是怎样局域网的设置,然后就是在子电脑上安装相关打印机驱动器。子电脑没有网络,需要在另外的电脑里用U盘拷贝过来。找不到同款打印机驱动器的程序,就试着找类似的,说不定就是用同一款程序呢。说起来很简单,整个过程操作起来会
服务之间调用的几种方式
ArchManual
分布式架构 数据库 分布式 微服务 架构 服务调用
服务调用是指一个软件系统通过某种通信协议请求另一个软件系统提供特定服务的过程。这一过程涉及服务提供者(Provider)和服务消费者(Consumer)之间的信息交换,通常通过网络或本地通信机制来实现。服务调用是分布式系统和微服务架构中的核心概念,能够实现不同系统或组件之间的协作和功能整合。优缺点优点模块化开发:可复用性:服务可以被多个应用或系统调用,减少重复开发。分而治之:系统可以拆分为多个独立
杨海文先生的孟子
大宋逸民
(2009年9月16日)今天下午去市里寄了一份东西,回到家里,照看了一会宝宝,已经不想开电脑干活了,于是拿起这本《浩然正气——孟子》读将起来。这本书的作者是中山大学杨海文先生。杨先生比我年长十岁,师从李宗桂先生。杨先生的大名我是早已贯耳的,因为业师经常念叨。我知道杨先生是孟子学专家,也在报端网络上读到过不少的别样的学术文章。杨先生富有才情,写的文章绝没有通常学术论文那般的又臭又硬,而是笔端带着感情
Cortex-A 寄存器组详细介绍
千千道
linux linux 物联网
一、引言在嵌入式系统开发中,深入了解处理器的寄存器组是至关重要的。Cortex-A系列处理器作为高性能的处理器架构,其寄存器组在系统运行和编程中起着关键作用。本文将详细介绍Cortex-A寄存器组的各个部分,包括通用寄存器、特殊功能寄存器以及它们在编程中的应用。二、通用寄存器1.概述Cortex-A处理器拥有一组通用寄存器,用于存储数据和地址。这些寄存器可以在各种指令中使用,例如算术运算、数据传输
3分钟说清楚Nacos和Eureka区别,面试不用愁
打工人何苦为难打工人
eureka
Nacos和Eureka都是非常优秀的服务注册与发现组件,它们在微服务架构中扮演着重要的角色。然而,这两个组件在实现方式、功能和性能等方面存在一些差异。首先,从实现方式上看,Nacos和Eureka都支持服务注册与发现,但是它们的实现方式略有不同。Nacos基于客户端/服务器架构,服务提供者在启动时将自己注册到Nacos的服务注册表中,服务消费者从Nacos的服务注册表中获取服务列表。而Eurek
OpenCV绘图函数(15)图像上绘制矩形函数 rectangle()的使用
jndingxin
OpenCV opencv 人工智能 计算机视觉
操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述绘制一个简单的、粗的或填充的直立矩形。这个函数cv::rectangle绘制一个矩形轮廓或一个填充的矩形,其两个相对的顶点分别是pt1和pt2。函数原型1voidcv::rectangle(InputOutputArrayimg,Rectrec,constScal
GitHub Copilot的详细介绍
西瓜本瓜@
github copilot 开发语言
目录主要功能:示例用法:GitHubCopilot的优缺点:优点:缺点:如何使用GitHubCopilot?总结:GitHubCopilot是一种基于人工智能的编程助手,由GitHub和OpenAI联合开发。它利用OpenAI的GPT模型(类似于GPT-4)来帮助开发者更快地编写代码。通过分析你当前的代码、注释、上下文,GitHubCopilot可以为你提供自动补全、代码建议、生成函数和代码块,甚
返利app哪个佣金高?2023十大返利app排行榜
桃朵app
返利app哪个佣金高?2023十大返利app排行榜顶级互联网营销大牛东方微信号:26688专注互联网副业20年。强!(联系我可以开营销号)也就是桃朵APP(直接应用市场搜索:桃朵邀请码:123456)也就是乖淘APP(直接应用市场搜索:乖淘邀请码:123456)桃朵APP&乖淘APP创始人-东方微信号:(26688)专注网络引流20年。带过百万团队,徒弟年入百万者有30人。独立开发桃朵APP:对接
ES6基础----Class的使用
Pluto & Ethereal
开发语言 es6 前端
目录1、ES5中定义类---function2、es5中定义类的方法,需要在原型(prototype)上定义3、ES6出现Class用于定义类,Class定义的类和function定义的类功能都大致相同,出现Class的原因是想让定义的类更符合面向对象的编程逻辑思维,让开发者更好接受4、继承extends子类继承父类的属性及方法5、静态的属性static有的属性及方法不想被实例所引用,只能被类直接
【什么是电商供应链】
启山智软 商城 源码
小程序
文章目录前言一、商品来源与采购计划:二、商品信息与库存管理:三、订单处理与物流配送:四、金融服务与全球采购:总结前言电商供应链是将传统供应链电子商务化,通过互联网服务平台实现供应链交易过程的全程电子化,彻底变革了上下游商业的协同模式。这种供应链在电商平台上的应用,不仅包括供应商、制造商、仓库、配送中心和渠道商等构成的物流网络,还整合了商流、资金流、信息流、物流等多个方面,以实现更高效的供应链管理。
Java基础---面向对象编程基础部分
傻虎贼头贼脑
Java java 开发语言 idea
1.什么是面向过程的编程?开发一个又一个的方法,有数据要处理,我们就调方法来处理。2.什么是面向对象的编程?开发一个一个的对象来处理数据,把数据交给对象,再调用对象的方法来完成对数据的处理。3.什么是对象?对象本质上是一种特殊的数据结构。4.对象是怎么来的?应用class来创建对象,class就是类,也称为对象的设计图(或者对象的模板)5.类和对象的一些注意事项类名建议用英文单词,首字母大写,满足
Maven自动化部署
木易林1
Maven自动化部署在项目开发中,通常是部署过程包含以下步骤检入代码在建项目全部进入SVN或源代码库中,并标记它。从SVN下载完整的源代码。构建应用程序。生成输出要么WAR或EAR文件存储到一个共同的网络位置。从网络获取的文件和文件部署到生产现场。更新日期和应用程序的更新版本号的文件。问题说明通常有多人参与了上述部署过程。一个团队可能手动签入的代码,其他人可以处理构建等。这很可能是任何一个步骤可能
Docker网络模式:深度理解与容器网络配置
隔窗听雨眠
docker
Docker的网络模式是容器化应用中一个关键而复杂的方面。本文将深入讨论Docker的网络模式,包括基本概念、常用网络模式以及高级网络配置,并通过更为丰富和实际的示例代码,帮助读者全面掌握如何理解和配置容器网络。Docker网络基础1Docker默认网络Docker提供了三种默认的网络驱动:bridge、host和none。这些驱动在不同场景下有各自的优劣。示例代码:创建使用默认bridge网络的
阿里云部署nuxt3+mongodb
打工很辛苦吧
阿里云 mongodb
文章目录阿里云部署nuxt3+mongodb一、云服务器安装mongodb二、mongodb添加管理员用户三、nuxt3使用mongodb四、使用pm2管理nodejs进程,运行nuxt3mongodb安装的参考文章阿里云服务器上部署node和mongodb教程阿里云部署nuxt3+mongodb一、云服务器安装mongodb安装#选择要安装的路径#之前nginx安装到etc下,我这里和mongo
ndk开发教程,Android-Binder机制及AIDL使用,实战篇
clhcowboy
程序员 android
开头1、一定要把基本的数据结构,经典的算法,Unix编程,程序编译链接及计算机原理等基础知识扎牢,这些会长远影响你的职业发展。2、推荐从C语言入门,不单是因为很多操作系统、网络协议栈开源代码由C/C++实现,更多是因为C语言自身的特性:作为高级语言用户无需关注底层细节,同时能直观的看到数据流向。而且C相对语法规则较为简单,可以短时间的上手应用。最重要的是,遵循C/C++、python的学习方式,比
Java 中MongoDB的使用
木子0204
mongodb 数据库
基础概念是一个基于分布式文件存储的开源数据库系统。再高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB旨在给WEB应用提供可扩展的高性能数据存储解决方案MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB文档类似于JSON对象。字段值可以包含其他文档,数组及文档数组。支持的数据库非常松散,类似于json的格式叫BSON,所以它即可以存储比
怎么开启22端口访问权限,让别的机器通过ssh或者向日葵等远程控制工具链接
MonkeyKing.sun
ssh 智能路由器 网络
在Ubuntu24.04上开启22端口访问权限,并允许其他机器通过SSH或向日葵等远程控制工具进行连接,您需要进行以下几步操作:1.安装并配置SSH服务器安装OpenSSH服务器:sudoaptupdatesudoaptinstallopenssh-server检查SSH服务状态:sudosystemctlstatusssh确保SSH服务正在运行。如果没有运行,可以启动它:sudosystemct
一个64位操作系统的设计与实现踩坑记录(一)
MasterTomato
手写OS OS Linux
Bochs的配置这里我是在Ubuntu18.04的服务器上进行代码的编写和编译,将生成的boot.img拷贝到windows平台下面的bochs运行。由于我的bochs运行在win平台上,因此并没有作者书中提到的./configure等选项,所以配置也和作者书中的不太一样,下面是我的配置文件供参考:##################################################
3410:练70.2 判断字符串是否为回文
dllglvzhenfeng
小学生C++编程入门 创新 NOI入门级 数据结构 学习 c++ c语言 GESP 算法 人工智能
3410:练70.2判断字符串是否为回文信息学奥赛一本通-编程启蒙(C++版)在线评测系统练70.2判断字符串是否为回文信息学奥赛一本通-编程启蒙(C++版)在线评测系统判断字符串是否构成回文判断字符串是否构成回文_哔哩哔哩_bilibili33判断字符串是否为回文_哔哩哔哩_bilibili【数据结构】C语言版用栈判断字符串是否回文【数据结构】C语言版用栈判断字符串是否回文_哔哩哔哩_bilib
开源项目的发展趋势之托管平台
flying jiang
开源
引言回溯至十五年前的求学时光,当我们初涉编程的浩瀚海洋,面对程序设计这一崭新挑战,曾渴望能有一份现成的源码作为启航的灯塔。然而,在那个时代,除了有限的SDK资源外,寻觅到高质量、可借鉴的源代码并非易事。幸而,随着技术的飞速进步与互联网的广泛普及,如今我们置身于一个充满机遇的代码托管新时代。在这个以学习为驱动的背景下,众多专业的代码托管平台如雨后春笋般涌现,它们不仅成为了程序员交流思想、分享智慧的乐
(170)时序收敛--->(20)时序收敛二十
FPGA系统设计指南针
FPGA系统设计(内训) fpga开发 时序收敛
1目录(a)FPGA简介(b)Verilog简介(c)时钟简介(d)时序收敛二十(e)结束1FPGA简介(a)FPGA(FieldProgrammableGateArray)是在PAL(可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。(b)
AI深度学习项目-yolo4_tiny 垃圾分类识别系统
毕设宇航
yolov4 垃圾识别 QQ767172261
项目概述目标本项目旨在开发一个高效的垃圾分类识别系统,利用深度学习技术特别是YOLOv4-tiny版本来实现垃圾的自动分类。YOLOv4-tiny作为YOLOv4的一个轻量化版本,在保证较高精度的同时,能够提供更快的检测速度,非常适合资源受限的设备或者要求实时性的应用场景。技术栈深度学习框架:PyTorch目标检测算法:YOLOv4-tiny编程语言:Python硬件加速:GPU(如果可用)功能特
计算机视觉之 GSoP 注意力模块
Midsummer-逐梦
计算机视觉(CV) 深度学习 机器学习 人工智能
计算机视觉之GSoP注意力模块一、简介GSopBlock是一个自定义的神经网络模块,主要用于实现GSoP(GlobalSecond-orderPooling)注意力机制。GSoP注意力机制通过计算输入特征的协方差矩阵,捕捉全局二阶统计信息,从而增强模型的表达能力。原论文:《GlobalSecond-orderPoolingConvolutionalNetworks(arxiv.org)》二、语法和
一个跟得上时代的大脑
风追蓝天见海洋
图片发自App今天再看樊登。其实这是樊登推荐书的简评集,书不厚,但信息量大概有20本。发现这本书名字起的真好,很多人都是为了这个名字买的吧。如果起名叫什么樊登推荐书目简评集,估计销量至少暴降90%。现在是数据革命时代,现在可能体会不到,但是再过100年或几十年,很可能这两年就会被定义为从网络时代向数据时代过渡的阶段。工业革命时期,很多人去砸机器,因为这些机器抢走了他们的饭碗。如果在当下,你可以理解
jvm调优总结(从基本概念 到 深度优化)
oloz
java jvm jdk 虚拟机 应用服务器
JVM参数详解:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。
【Scala十六】Scala核心十:柯里化函数
bit1129
scala
本篇文章重点说明什么是函数柯里化,这个语法现象的背后动机是什么,有什么样的应用场景,以及与部分应用函数(Partial Applied Function)之间的联系 1. 什么是柯里化函数
A way to write functions with multiple parameter lists. For instance
def f(x: Int)(y: Int) is a
HashMap
dalan_123
java
HashMap在java中对很多人来说都是熟的;基于hash表的map接口的非同步实现。允许使用null和null键;同时不能保证元素的顺序;也就是从来都不保证其中的元素的顺序恒久不变。
1、数据结构
在java中,最基本的数据结构无外乎:数组 和 引用(指针),所有的数据结构都可以用这两个来构造,HashMap也不例外,归根到底HashMap就是一个链表散列的数据
Java Swing如何实时刷新JTextArea,以显示刚才加append的内容
周凡杨
java 更新 swing JTextArea
在代码中执行完textArea.append("message")后,如果你想让这个更新立刻显示在界面上而不是等swing的主线程返回后刷新,我们一般会在该语句后调用textArea.invalidate()和textArea.repaint()。
问题是这个方法并不能有任何效果,textArea的内容没有任何变化,这或许是swing的一个bug,有一个笨拙的办法可以实现
servlet或struts的Action处理ajax请求
g21121
servlet
其实处理ajax的请求非常简单,直接看代码就行了:
//如果用的是struts
//HttpServletResponse response = ServletActionContext.getResponse();
// 设置输出为文字流
response.setContentType("text/plain");
// 设置字符集
res
FineReport的公式编辑框的语法简介
老A不折腾
finereport 公式 总结
FINEREPORT用到公式的地方非常多,单元格(以=开头的便被解析为公式),条件显示,数据字典,报表填报属性值定义,图表标题,轴定义,页眉页脚,甚至单元格的其他属性中的鼠标悬浮提示内容都可以写公式。
简单的说下自己感觉的公式要注意的几个地方:
1.if语句语法刚接触感觉比较奇怪,if(条件式子,值1,值2),if可以嵌套,if(条件式子1,值1,if(条件式子2,值2,值3)
linux mysql 数据库乱码的解决办法
墙头上一根草
linux mysql 数据库乱码
linux 上mysql数据库区分大小写的配置
lower_case_table_names=1 1-不区分大小写 0-区分大小写
修改/etc/my.cnf 具体的修改内容如下:
[client]
default-character-set=utf8
[mysqld]
datadir=/var/lib/mysql
socket=/va
我的spring学习笔记6-ApplicationContext实例化的参数兼容思想
aijuans
Spring 3
ApplicationContext能读取多个Bean定义文件,方法是:
ApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[]{“bean-config1.xml”,“bean-config2.xml”,“bean-config3.xml”,“bean-config4.xml
mysql 基准测试之sysbench
annan211
基准测试 mysql基准测试 MySQL测试 sysbench
1 执行如下命令,安装sysbench-0.5:
tar xzvf sysbench-0.5.tar.gz
cd sysbench-0.5
chmod +x autogen.sh
./autogen.sh
./configure --with-mysql --with-mysql-includes=/usr/local/mysql
sql的复杂查询使用案列与技巧
百合不是茶
oracle sql 函数 数据分页 合并查询
本片博客使用的数据库表是oracle中的scott用户表;
------------------- 自然连接查询
查询 smith 的上司(两种方法)
&
深入学习Thread类
bijian1013
java thread 多线程 java多线程
一. 线程的名字
下面来看一下Thread类的name属性,它的类型是String。它其实就是线程的名字。在Thread类中,有String getName()和void setName(String)两个方法用来设置和获取这个属性的值。
同时,Thr
JSON串转换成Map以及如何转换到对应的数据类型
bijian1013
java fastjson net.sf.json
在实际开发中,难免会碰到JSON串转换成Map的情况,下面来看看这方面的实例。另外,由于fastjson只支持JDK1.5及以上版本,因此在JDK1.4的项目中可以采用net.sf.json来处理。
一.fastjson实例
JsonUtil.java
package com.study;
impor
【RPC框架HttpInvoker一】HttpInvoker:Spring自带RPC框架
bit1129
spring
HttpInvoker是Spring原生的RPC调用框架,HttpInvoker同Burlap和Hessian一样,提供了一致的服务Exporter以及客户端的服务代理工厂Bean,这篇文章主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成
在
【RPC框架Hessian二】Hessian 对象序列化和反序列化一文中
【Mahout二】基于Mahout CBayes算法的20newsgroup的脚本分析
bit1129
Mahout
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information re
nginx三种获取用户真实ip的方法
ronin47
随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户的真实IP地址,如果后端是apache,请跳转到<apache获取用户真实IP地址>,如果是后端真实服务器是nginx,那么继续往下看。
实例环境: 用户IP 120.22.11.11
java-判断二叉树是不是平衡
bylijinnan
java
参考了
http://zhedahht.blog.163.com/blog/static/25411174201142733927831/
但是用java来实现有一个问题。
由于Java无法像C那样“传递参数的地址,函数返回时能得到参数的值”,唯有新建一个辅助类:AuxClass
import ljn.help.*;
public class BalancedBTree {
BeanUtils.copyProperties VS PropertyUtils.copyProperties
诸葛不亮
PropertyUtils BeanUtils
BeanUtils.copyProperties VS PropertyUtils.copyProperties
作为两个bean属性copy的工具类,他们被广泛使用,同时也很容易误用,给人造成困然;比如:昨天发现同事在使用BeanUtils.copyProperties copy有integer类型属性的bean时,没有考虑到会将null转换为0,而后面的业
[金融与信息安全]最简单的数据结构最安全
comsci
数据结构
现在最流行的数据库的数据存储文件都具有复杂的文件头格式,用操作系统的记事本软件是无法正常浏览的,这样的情况会有什么问题呢?
从信息安全的角度来看,如果我们数据库系统仅仅把这种格式的数据文件做异地备份,如果相同版本的所有数据库管理系统都同时被攻击,那么
vi区段删除
Cwind
linux vi 区段删除
区段删除是编辑和分析一些冗长的配置文件或日志文件时比较常用的操作。简记下vi区段删除要点备忘。
vi概述
引文中并未将末行模式单独列为一种模式。单不单列并不重要,能区分命令模式与末行模式即可。
vi区段删除步骤:
1. 在末行模式下使用:set nu显示行号
非必须,随光标移动vi右下角也会显示行号,能够正确找到并记录删除开始行
清除tomcat缓存的方法总结
dashuaifu
tomcat 缓存
用tomcat容器,大家可能会发现这样的问题,修改jsp文件后,但用IE打开 依然是以前的Jsp的页面。
出现这种现象的原因主要是tomcat缓存的原因。
解决办法如下:
在jsp文件头加上
<meta http-equiv="Expires" content="0"> <meta http-equiv="kiben&qu
不要盲目的在项目中使用LESS CSS
dcj3sjt126com
Web less
如果你还不知道LESS CSS是什么东西,可以看一下这篇文章,是我一朋友写给新人看的《CSS——LESS》
不可否认,LESS CSS是个强大的工具,它弥补了css没有变量、无法运算等一些“先天缺陷”,但它似乎给我一种错觉,就是为了功能而实现功能。
比如它的引用功能
?
.rounded_corners{
[入门]更上一层楼
dcj3sjt126com
PHP yii2
更上一层楼
通篇阅读完整个“入门”部分,你就完成了一个完整 Yii 应用的创建。在此过程中你学到了如何实现一些常用功能,例如通过 HTML 表单从用户那获取数据,从数据库中获取数据并以分页形式显示。你还学到了如何通过 Gii 去自动生成代码。使用 Gii 生成代码把 Web 开发中多数繁杂的过程转化为仅仅填写几个表单就行。
本章将介绍一些有助于更好使用 Yii 的资源:
Apache HttpClient使用详解
eksliang
httpclient http协议
Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会
zxing二维码扫描功能
gundumw100
android zxing
经常要用到二维码扫描功能
现给出示例代码
import com.google.zxing.WriterException;
import com.zxing.activity.CaptureActivity;
import com.zxing.encoding.EncodingHandler;
import android.app.Activity;
import an
纯HTML+CSS带说明的黄色导航菜单
ini
html Web html5 css hovertree
HoverTree带说明的CSS菜单:纯HTML+CSS结构链接带说明的黄色导航
在线体验效果:http://hovertree.com/texiao/css/1.htm代码如下,保存到HTML文件可以看到效果:
<!DOCTYPE html >
<html >
<head>
<title>HoverTree
fastjson初始化对性能的影响
kane_xie
fastjson 序列化
之前在项目中序列化是用thrift,性能一般,而且需要用编译器生成新的类,在序列化和反序列化的时候感觉很繁琐,因此想转到json阵营。对比了jackson,gson等框架之后,决定用fastjson,为什么呢,因为看名字感觉很快。。。
网上的说法:
fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。
基于Mybatis封装的增删改查实现通用自动化sql
mengqingyu
DAO
1.基于map或javaBean的增删改查可实现不写dao接口和实现类以及xml,有效的提高开发速度。
2.支持自定义注解包括主键生成、列重复验证、列名、表名等
3.支持批量插入、批量更新、批量删除
<bean id="dynamicSqlSessionTemplate" class="com.mqy.mybatis.support.Dynamic
js控制input输入框的方法封装(数字,中文,字母,浮点数等)
qifeifei
javascript js
在项目开发的时候,经常有一些输入框,控制输入的格式,而不是等输入好了再去检查格式,格式错了就报错,体验不好。 /** 数字,中文,字母,浮点数(+/-/.) 类型输入限制,只要在input标签上加上 jInput="number,chinese,alphabet,floating" 备注:floating属性只能单独用*/
funct
java 计时器应用
tangqi609567707
java timer
mport java.util.TimerTask; import java.util.Calendar; public class MyTask extends TimerTask { private static final int
erlang输出调用栈信息
wudixiaotie
erlang
在erlang otp的开发中,如果调用第三方的应用,会有有些错误会不打印栈信息,因为有可能第三方应用会catch然后输出自己的错误信息,所以对排查bug有很大的阻碍,这样就要求我们自己打印调用的栈信息。用这个函数:erlang:process_display (self (), backtrace).需要注意这个函数只会输出到标准错误输出。
也可以用这个函数:erlang:get_s