首页 文章 精选 留言 我的

精选列表

搜索[Java框架],共10000篇文章
优秀的个人博客,低调大师

iOS:基于Socket的第三方框架CocoaAsyncSocket的使用

CocoaAsyncSocket无疑是目前封装得最完善的Socket库了:支持异步TCP/UDP,支持GCD,Objective-C接口封装,同时还有日志跟踪功能,使用此日志跟踪,程序员可以很方便的进行调试。 文件如下: 如果想打开日志调试,很简单,导入需要的DDASLLogger.h头文件,创建DDASLLogger单利对象就可以了。 简单的演示如下: 1.在故事版布局 2.在ViewController.h文件中 // ViewController.h // AysnSocket #import <UIKit/UIKit.h> #import "AsyncSocket.h" @interface ViewController : UIViewController { NSMutableArray *_scokets; //存放客户端的可变数组 AsyncSocket *_sendSocket; //发送端 AsyncSocket *_receScoket; //接收端 } @end 3.在ViewController.m文件中 // ViewController.m // AysnSocket #import "ViewController.h" #import "AsyncSocket.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UITextView *msgView; @property (weak, nonatomic) IBOutlet UITextField *ipField; @property (weak, nonatomic) IBOutlet UITextField *sendField; - (IBAction)coneClicked:(UIButton *)sender; //连接服务器 - (IBAction)sendClicked:(UIButton *)sender; //发送端发送消息 - (IBAction)disConeClicked:(UIButton *)sender; //断开连接 @end @implementation ViewController @synthesize msgView; @synthesize ipField; @synthesize sendField; - (void)viewDidLoad { [super viewDidLoad]; //1.初始化scokets数组,存储新的客户端scoket _scokets = [NSMutableArray array]; //2.实例化发送端和接收端 _sendSocket = [[AsyncSocket alloc]initWithDelegate:self]; _receScoket = [[AsyncSocket alloc]initWithDelegate:self]; //3.接收端开始监听网络 NSError *error; [_receScoket acceptOnPort:8888 error:&error]; } #pragma mark - 代理方法 //接受到新的scoket - (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket { //将新接收到的socket加入数组中 [_scokets addObject:newSocket]; //开始接受数据 [newSocket readDataWithTimeout:-1 tag:0]; } //接收端收到信息 - (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag { //接收数据 NSString *string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; //格式化数据 self.msgView.text = [NSString stringWithFormat:@"%@,%@,%@",self.msgView.text,self.ipField.text,string]; //循环读取 [sock readDataWithTimeout:-1 tag:0]; } //连接服务器成功 - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port { NSLog(@"%@",host); NSLog(@"连接服务器成功"); } //断开服务器成功 -(void)onSocketDidDisconnect:(AsyncSocket *)sock { NSLog(@"断开连接成功"); } #pragma mark - 按钮事件 //建立连接 - (IBAction)coneClicked:(UIButton *)sender { if (_sendSocket.isConnected) { [_sendSocket disconnect]; } //客户端重新连接到主机 [_sendSocket connectToHost:self.ipField.text onPort:8888 withTimeout:30 error:nil]; } //发送消息 - (IBAction)sendClicked:(UIButton *)sender { //客户端发送数据 NSData *data = [self.sendField.text dataUsingEncoding:NSUTF8StringEncoding]; [_sendSocket writeData:data withTimeout:30 tag:0]; //清空数据 self.sendField.text = @""; } //断开服务器 - (IBAction)disConeClicked:(UIButton *)sender { if (_sendSocket.isConnected) { [_sendSocket disconnect]; } } @end 测试如下: (1)打开电脑的网络设置,看一下ip和设置端口为8888 (2)运行程序,在演示中输入ip和消息 一开始: 输入ip和消息,然后连接服务器 连接成功服务器成功 发送消息,数据发送成功 断开服务器: 断开服务器后,再尝试发送数据,是无法发送并显示在UITextView上的。 程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式! 本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/5169209.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

一文读懂深度学习框架下的目标检测(附数据集)

从简单的图像分类到3D位置估算,在机器视觉领域里从来都不乏有趣的问题。其中我们最感兴趣的问题之一就是目标检测。 如同其他的机器视觉问题一样,目标检测目前为止还没有公认最好的解决方法。在了解目标检测之前,让我们先快速地了解一下这个领域里普遍存在的一些问题。 目标检测vs 其他计算机视觉问题图像分类 在计算机视觉领域中,最为人所知的问题便是图像分类问题。 图像分类是把一幅图片分成多种类别中的一类。 ImageNet是在学术界使用的最受欢迎的数据集之一,它由数百万个已分类图像组成,部分数据用于ImageNet大规模视觉识别挑战赛(ILSVRC)。 最近几年来,解决分类问题的模型已经有了超越人类的识别能力,所以分类问题实际上已经被解决了。 然而,图像分类问题有许多挑战,相伴随着的是许多如何解决这些问题的文献以及对还未被解决的问题的探讨。 图像分类

优秀的个人博客,低调大师

Python爬虫从入门到放弃(十七)之 Scrapy框架中Download Middleware用法

这篇文章中写了常用的下载中间件的用法和例子。Downloader Middleware处理的过程主要在调度器发送requests请求的时候以及网页将response结果返回给spiders的时候,所以从这里我们可以知道下载中间件是介于Scrapy的request/response处理的钩子,用于修改Scrapy request和response。 编写自己的下载器中间件 编写下载器中间件,需要定义以下一个或者多个方法的python类 为了演示这里的中间件的使用方法,这里创建一个项目作为学习,这里的项目是关于爬去httpbin.org这个网站scrapy startproject httpbintestcd httpbintestscrapy genspider example example.com 创建好后的目录结构如下: 这里我们先写一个简单的代理中间件来实现ip的伪装创建好爬虫之后我们讲httpbin.py中的parse方法改成: def parse(self, response): print(response.text) 然后通过命令行启动爬虫:scrapy crawl httpbin 在最下面我们可以看到"origin": "114.250.88.66"我们在查看自己的ip: 而我们要做就是通过代理中间件来实现ip的伪装,在middleares.py中写如下的中间件类: class ProxyMiddleare(object): logger = logging.getLogger(__name__) def process_request(self,request, spider): self.logger.debug("Using Proxy") request.meta['proxy'] = 'http://127.0.0.1:9743' return None 这里因为我本地有一个代理FQ地址为:http://127.0.0.1:9743 所以直接设置为代理用,代理的地址为日本的ip然后在settings.py配置文件中开启下载中间件的功能,默认是关闭的 然后我们再次启动爬虫:scrapy crawl httpbin从下图的输入日志中我们可以看书我们定义的中间件已经启动,并且输入了我们打印的日志信息,并且我们查看origin的ip地址也已经成了日本的ip地址,这样我们的代理中间件成功了 详细说明 class Scrapy.downloadermiddleares.DownloaderMiddleware process_request(request,spider) 当每个request通过下载中间件时,该方法被调用,这里有一个要求,该方法必须返回以下三种中的任意一种:None,返回一个Response对象,返回一个Request对象或raise IgnoreRequest。三种返回值的作用是不同的。 None:Scrapy将继续处理该request,执行其他的中间件的相应方法,直到合适的下载器处理函数(download handler)被调用,该request被执行(其response被下载)。 Response对象:Scrapy将不会调用任何其他的process_request()或process_exception() 方法,或相应地下载函数;其将返回该response。 已安装的中间件的 process_response() 方法则会在每个response返回时被调用。 Request对象:Scrapy则停止调用 process_request方法并重新调度返回的request。当新返回的request被执行后, 相应地中间件链将会根据下载的response被调用。 raise一个IgnoreRequest异常:则安装的下载中间件的 process_exception() 方法会被调用。如果没有任何一个方法处理该异常, 则request的errback(Request.errback)方法会被调用。如果没有代码处理抛出的异常, 则该异常被忽略且不记录。 process_response(request, response, spider) process_response的返回值也是有三种:response对象,request对象,或者raise一个IgnoreRequest异常 如果其返回一个Response(可以与传入的response相同,也可以是全新的对象), 该response会被在链中的其他中间件的 process_response() 方法处理。 如果其返回一个 Request 对象,则中间件链停止, 返回的request会被重新调度下载。处理类似于 process_request() 返回request所做的那样。 如果其抛出一个 IgnoreRequest 异常,则调用request的errback(Request.errback)。 如果没有代码处理抛出的异常,则该异常被忽略且不记录(不同于其他异常那样)。 这里我们写一个简单的例子还是上面的项目,我们在中间件中继续添加如下代码: 然后在spider中打印状态码: 这样当我们重新运行爬虫的时候就可以看到如下内容 process_exception(request, exception, spider) 当下载处理器(download handler)或 process_request() (下载中间件)抛出异常(包括 IgnoreRequest 异常)时,Scrapy调用 process_exception()。 process_exception() 也是返回三者中的一个: 返回 None 、 一个 Response 对象、或者一个 Request 对象。 如果其返回 None ,Scrapy将会继续处理该异常,接着调用已安装的其他中间件的 process_exception() 方法,直到所有中间件都被调用完毕,则调用默认的异常处理。 如果其返回一个 Response 对象,则已安装的中间件链的 process_response() 方法被调用。Scrapy将不会调用任何其他中间件的 process_exception() 方法。 如果其返回一个 Request 对象, 则返回的request将会被重新调用下载。这将停止中间件的 process_exception() 方法执行,就如返回一个response的那样。 这个是非常有用的,就相当于如果我们失败了可以在这里进行一次失败的重试,例如当我们访问一个网站出现因为频繁爬取被封ip就可以在这里设置增加代理继续访问,我们通过下面一个例子演示 scrapy genspider googlewww.google.com这里我们创建一个谷歌的爬虫, 然后启动scrapy crawl google,可以看到如下情况: 这里我们就写一个中间件,当访问失败的时候增加代理首先我们把google.py代码进行更改,这样是白超时时间设置为10秒要不然等待太久,这个就是我们将spider里的时候的讲过的make_requests_from_url,这里我们把这个方法重写,并将等待超时时间设置为10s 这样我重新启动爬虫:scrapy crawl google,可以看到如下: 这里如果我们不想让重试,可以把重试中间件关掉: 这样设置之后我们就把失败重试的中间件给关闭了,设置为None就表示关闭这个中间件,重新启动爬虫我们也可以看出没有进行重试直接报错了 我们将代理中间件的代理改成如下,表示遇到异常的时候给请求加上代理,并返回request,这个样就会重新请求谷歌 重新启动谷歌爬虫,我们可以看到,我们第一次返回我们打印的日志信息GET Exception,然后加上代理后成功访问了谷歌,这里我的代理是日本的代理节点,所以访问到的是日本的谷歌站 所有的努力都值得期许,每一份梦想都应该灌溉!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册