Amp

iOS-SocketRocket 长链接 简单使用

拟墨画扇 提交于 2020-08-06 13:44:19
基于腾讯云直播使用的SocketRocket,进行直播间的互动 一、SocketRocket 1.1 使用到的三方 SocketRocket,可以直接pod 1.2 创建SocketRocketUtility类文件,用于socket开启关闭时使用 //SocketRocketUtility.h文件 #import <Foundation/Foundation.h> #import <SocketRocket.h> @interface SocketRocketUtility : NSObject // 获取连接状态 @property (nonatomic,assign,readonly) SRReadyState socketReadyState; + (SocketRocketUtility *)shareInstance; -(void)SRWebSocketOpenWithURLString:(NSString *)urlString;//开启连接 -(void)SRWebSocketClose;//关闭连接 - (void)sendData:(id)data;//发送数据 @end //SocketRocketUtility.m文件 #import "SocketRocketUtility.h" @interface SocketRocketUtility()

端口扫描器的几种代码实现方案

天大地大妈咪最大 提交于 2020-08-06 13:17:44
  搞安全的应该都知道端口扫描在渗透测试、漏洞扫描过程中的重要性,其与URL爬虫等技术构成了漏洞扫描的第一阶段,即目标信息收集。因此能否开发出一款高效稳定的端口扫描器,往往决定了漏洞扫描器的好坏。那么说到端口扫描器,我们往往会先想到nmap、masscan等神器,它们是这个领域的标杆。但本篇并不是为了介绍这几款工具,而是谈谈如何自研一款高效稳定的端口扫描器。   端口扫描器,顾名思义就是为了探测服务器上的某个端口是否开放,究其原理可以分为很多种探测方式,比如tcp三次握手扫描,syn扫描等等,本篇并不打算详细介绍这些扫描方式的区别,有兴趣的可以看下nmap的文档,对这几种扫描方式有详细的介绍。   那么说下本文重点,基于这几天我研究并尝试利用python、go开发tcp扫描器、tcp-syn扫描器,以及对比它们之间的速度性能、稳定性差异情况,将测试结果在此做个记录,并分享一下代码以及方案。   说明:文章结尾将给出本篇所使用代码的Github地址,可供大家测试,代码测试环境为centos7。   scan for Python Socket   Python的Socket模块可以创建套接字,创建tcp三次握手连接,以此探测目标端口是否存活。本篇将使用socket模块编写tcp扫描以及syn扫描,并对比两者的差异。    tcp scan   快来看代码: 1 # ! -*-

Python 为什么抛弃累赘的花括号,使用缩进来划分代码块?

我的梦境 提交于 2020-08-06 12:23:14
大家好,这是“Python为什么”系列节目的文字稿( 文末有观看地址 )。 本期话题:Python 为什么使用缩进来划分代码块,而不像其它语言使用花括号 {} 或者 “end” 之类的语法? Python 的缩进是一个老生常谈的话题,经常有人会提及它,比如 Python 之父在上个月就恰好转发过一篇文章: 因为这篇文章,Guido 还受邀在 Python Bytes 播客上录制了一期节目: 那么,Python 为什么要用缩进来划分代码块呢? 我收集梳理了几份材料,接下来将带大家一起揭晓 Python 这么做的设计原因: 缩进语法,更加优雅 缩进语法,更加清晰 使用缩进,保持一致性,避免造成误读 使用缩进,代码更紧凑,便于浏览,没有累赘 使用缩进,已足够令解释器执行,没必要使用多余的符号 强制缩进,源自古老的 ABC 语言,Guido 是这门语言的设计者之一 其思想可能出自 Don Knuth(高德纳,著名计算机科学家,经典巨著《计算机程序设计艺术》的作者),他在 1974 年提出,在当时是很时髦和前卫的思想 使用缩进,可以终结大括号放在函数名后面还是再换一行的终极争论(据说此话题能令不同派系的程序员大打出手!) 以上罗列的原因主要来源于 Python 官方文档、官方 wiki 以及 Python 之父的早期访谈。 总而言之,Python 使用缩进语法,体现了它非常优雅

iTOP-4412开发板-Android4.4-Bluetooth移植文档

試著忘記壹切 提交于 2020-08-06 11:08:56
目录 目录........................................................................................................................................... 1 1.1 概述.................................................................................................................................. 1 1.2 硬件相关部分 .................................................................................................................. 2 1.3 Kernel ............................................................................................................................... 4 1.3.1 概述.....................................

【科创人独家】军哥手记程军:我的2020,先打个60分吧

不羁的心 提交于 2020-08-06 11:06:03
技术人成长之路荆棘遍布,30岁左右被手握新技术、加班凶猛的后辈冲击,转型管理成为前行的通行证;35~40岁,掌握了管理技能、薪水更低的后浪再次袭来,能否补全商业思维、从成本模型跃迁为价值创造者、战略护航者,又一次成为生死考验。 程军打造的公众号“军哥手记”,是2020年初技术圈内的现象级自媒体。如今他站在阻隔技术人成长的叹息之墙前思考未来,陪伴着他的两位好友,名唤“焦虑”和“希望”。 参考阅读: 1个月错失百万,为什么还要感恩饿了么? 为什么我放弃近千万期权离开贝壳找房? 40岁之后不想打工 科创人:您长文回顾饿了么、贝壳找房两段经历的文章在圈内反响强烈,能否介绍下离职贝壳后的经历? 程军:2019年3月离职贝壳后,我做的第一件事是寻找创业机会,当时有一个完整的想法,是钓鱼相关的一个互联网服务产品,简单说就是野钓信息的付费分享。我本人非常喜欢钓鱼,钓鱼带给我很多人生思考,但是作为创业项目来说,我接触了很多投资人朋友,他们的意见是这个市场很小,整体市场规模也就3000多万人,在互联网行业来说是很小的一个数字。我也测算过,在上海我家三公里范围内的钓鱼玩家可能也就1000多人,大部分还是有一定年龄的中老年用户,他们对互联网产品接受度天然偏低。纠结了大概半年还是放弃了,给孩子买了个学区房(笑)。 9月的时候入职了一家奢侈品电商企业,融到B轮,期权条件都还不错,月流水过亿

WinForm界面开发教程:使用Dev的TreeList实现节点过滤查询

巧了我就是萌 提交于 2020-08-06 11:00:28
DevExpress Winforms Controls 内置140多个UI控件和库,完美构建流畅、美观且易于使用的应用程序。DevExpress WinForm v20.1全新发布,想要体验? 点击下载>> 在我较早的一篇随笔《 在DevExpress程序中使用TeeList控件以及节点查询的处理 》中,介绍了在树形列表TreeList控件上面,利用SearchControl实现节点的模糊查询过滤操作,效果还是非常不错的,TreeList功能比较强大,界面也相对比微软内置的Winform的TreeView控件美观不少。后来在一次偶然过程中,发现TreeList控件本身就可以打开头部过滤输入,实现节点的快速过滤,不过过滤是完全匹配方式,和我们常规的模糊匹配思路不一样,本篇随笔介绍对TreeList控件常规过滤方式的改进,支持内置输入过滤框中实现节点的模糊查询过滤操作。 一、利用SearchControl实现节点的模糊查询过滤回顾 在《 在DevExpress程序中使用TeeList控件以及节点查询的处理 》中介绍了整个开发的步骤和思路,最终的实现效果如下所示。 上面那个界面是之前案例的效果,新版本目前已经把不匹配的过滤掉了,最终效果如下所示。 如果我们忽略树列表的初始化操作和绑定数据源的部分,那么实现这个功能

SQL 如何拆分字符串中的数值后排序

大憨熊 提交于 2020-08-06 10:56:07
通常情形下,一列数据都是整体参与排序,但如果当字段是由字母跟序号组合在一起的复合列,比如现有表 TData 中列名为 NameSerial 的一组数据: Mike105 Rose11 Rose1 Rose5 Mike6 现在需要先按名字排序,再按序号排序。比如 Mike6 要排在 Mike105 前面,期望的结果如下: Mike6 Mike105 Rose1 Rose5 Rose11 由于 SQL 不支持对字段的单词拆分,所以只能写存储过程拆分数据,然后使用 SQL 查询来排序。以 SQL Server2012 为例,自定义数据拆分标量值函数 dbo.words 如下: CREATE FUNCTION dbo . words ( @word VARCHAR ( 100 ) , @part INT ) RETURNS VARCHAR ( 100 ) AS BEGIN DECLARE @sub VARCHAR ( 100 ) DECLARE @tmp VARCHAR ( 10 ) DECLARE @numIndex INT DECLARE @len INT DECLARE @i INT SET @i = 1 SET @len = Len ( @word ) WHILE @i <= @len BEGIN SET @tmp = Substring ( @word , @i , 1 ) IF

ES6字符串

吃可爱长大的小学妹 提交于 2020-08-06 10:12:25
ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版。 字符串重复 repeat():返回新的字符串,表示将字符串重复指定次数返回。 console.log("Hello,".repeat(2)); // "Hello,Hello," 如果参数是小数,向下取整 console.log("Hello,".repeat(3.2)); // "Hello,Hello,Hello," 如果参数是 0 至 -1 之间的小数,会进行取整运算,0 至 -1 之间的小数取整得到 -0 ,等同于 repeat 零次 console.log("Hello,".repeat(-0.5)); // "" 如果参数是 NaN,等同于 repeat 零次 console.log("Hello,".repeat(NaN)); // "" 如果参数是负数或者 Infinity ,会报错: console.log("Hello,".repeat(-1)); // RangeError: Invalid count value console.log("Hello,".repeat(Infinity)); // RangeError: Invalid count value 如果传入的参数是字符串,则会先将字符串转化为数字 console.log(

快速开发好帮手,移动开发新思路

大城市里の小女人 提交于 2020-08-06 10:09:53
办公室里门窗紧闭,只有日光灯在有频率的闪烁着,伴随着冷气机吹出的呼呼风声,像一曲低沉的悲歌,混合着燃烧过的烟草味,压抑得 人近乎窒息。 孙东面色凝重,揉捏着紧皱的眉头,从外面推门走了进来。他径直来到窗边,目光看向窗外,天空暗沉无光,即便已经是正午,厚重阴郁的黑云,也将阳光遮避得严严实实。南方夏日的气候,就是如此善变,尽管整个上午,都是晴空万里,但此时,已然是一副,暴雨将至的光景。 他回到办公桌前坐下,端起手边早已凉透的咖啡一口饮尽,重重地叹了一口气,沉默良久,孙东开口了:“大家先把手头的事情停一下,我有个事情要向大家宣布!”同事们纷纷看向他,七嘴八舌地问“什么事情呀孙主管?”,“孙主管有啥好事要说啊?”,“对啊,啥好事?” 孙东清了清嗓子,提高了音调:“不开玩笑啊, 刚才领导,找我谈了推进公司移动办公的事,老办公系统,只能在PC上使用,所以,领导要求我们IT部,拿出一个包含移动端的新系统。 ”话音刚落,同事们便开始窸窸窣窣地讨论起来。 说着,他缓缓站起身,在办公室里来回踱着步,说:“你们也知道,现行的办公系统是外购的,使用过程中呢,也出过不少问题,所以领导期望,新系统由咱们IT部自主开发。” 讲到这里,同事们的讨论声越来越大。讨论的细节我也没全记住,大致意思就是,我们人手不足,经验也不足,大家对能否完成这个任务充满忧虑。他们有这样的担忧,我是理解的,也在意料之中。业内人士都懂的

使用模板元编程操作类型集合(C++11下的TypeList)

心不动则不痛 提交于 2020-08-06 09:59:47
群里有个朋友要实现这么一个功能:如何在编译期把一个函数类型的参数减少一个。 简单来说,就是实现下面这个模板: remove_func_par<2, void(int, long, short)>::type; // type = void(int, long) 根据输入的编译期整数,把函数参数表里对应的参数干掉一个。 为了实现这种功能,我们需要操作变参模板的参数包。比如像这样: // make function's parameters from the types template <typename R, typename TypesT> struct make_func_par; template <typename R, typename... P> struct make_func_par<R, types<P...>> { typedef R type(P...); }; // remove function's parameter template <size_t N, typename F> struct remove_func_par; template <size_t N, typename R, typename... P> struct remove_func_par<N, R(P...)> { using erase_pars_t = typename