handler

python实现FTP服务器

倖福魔咒の 提交于 2020-01-01 04:04:59
基础知识 FTP只通过 TCP连接 , FTP不同于其他服务的是它使用了两个端口 , 一个数据端口和一个命令端口 (或称为控制端口 )。 通常 21端口是命令端口, 20端口是数据端口。当混入主动 /被动模式的概念时,数据端口就有可能不是 20了 FTP主动模式 在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接, 然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令。 服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。 FTP服务器命令( 21)端口接受客户端任意端口(客户端初始连接) FTP服务器命令( 21)端口到客户端端口( >1023)(服务器响应客户端命令) FTP服务器数据( 20)端口到客户端端口( >1023)(服务器初始化数据连接到客户端数据端口) FTP服务器数据( 20)端口接受客户端端口( >1023)(客户端发送 ACK包到服务器的数据端口) 主动模式的优点: 服务端配置简单,利于服务器安全管理,服务器只需要开放21端口 主动模式的缺点: 如果客户端开启了防火墙,或客户端处于内网(NAT网关之后), 那么服务器对客户端端口发起的连接可能会失败 FTP被动模式 在被动模式下,FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接

python实现FTP服务器

蓝咒 提交于 2020-01-01 04:03:45
FTP服务的主动模式和被动模式 在开始之前,先聊一下FTP的主动模式和被动模式,两者的区别 , 用两张图来表示可能会更加清晰一些: 主动模式: 主动模式工作过程: 1. 客户端以随机非特权端口N,就是大于1024的端口,对server端21端口发起连接 2. 客户端开始监听 N+1端口; 3. 服务端会主动以20端口连接到客户端的N+1端口。 主动模式的优点: 服务端配置简单,利于服务器安全管理,服务器只需要开放21端口 主动模式的缺点: 如果客户端开启了防火墙,或客户端处于内网(NAT网关之后), 那么服务器对客户端端口发起的连接可能会失败 被动模式: 被动模式工作过程: 1. 客户端以随机非特权端口连接服务端的21端口 2. 服务端开启一个非特权端口为被动端口,并返回给客户端 3. 客户端以非特权端口+1的端口主动连接服务端的被动端口 被动模式缺点: 服务器配置管理稍显复杂,不利于安全,服务器需要开放随机高位端口以便客户端可以连接,因此大多数FTP服务软件都可以手动配置被动端口的范围 被动模式的优点: 对客户端网络环境没有要求 了解了FTP之后,开始使用python来实现FTP服务 准备工作 本次使用python版本:python 3.4.3 安装模块 pyftpdlib pip3 install pyftpdlib 创建代码文件 FtpServer.py 代码

python搭建简易Web Server

╄→гoц情女王★ 提交于 2020-01-01 04:02:59
  如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等。那么, Python可能帮助你,使用Python可以完成一个简单的内建 HTTP 服务器,于是,你可以把你的目录和文件都以HTTP的方式展示出来,只需要干一件事情,那就是安装一个Python。   实际上来说,这是一个可以用来共享文件的非常有用的方式。实现一个微型的HTTP服务程序来说是很简单的事情,在Python下,只需要一个命令行。下面是这个命令行:(假设我们需要共享我们的目录 /home/haoel 而IP地址是192.168.1.1) cd D:\Program Files\CodeDirectory\python python -m SimpleHTTPServer 这就行了,而我们的HTTP服务在8000号端口上侦听。你会得到下面的信息: Serving HTTP on 0.0.0.0 port 8000 ... 你可以打开你的浏览器(IE或Firefox),然后输入下面的URL: http://192.168.1.1:8000 如果你的目录下有一个叫 index.html 的文件名的文件,那么这个文件就会成为一个默认页,如果没有这个文件,那么,目录列表就会显示出来。 如果你想改变端口号,你可以使用如下的命令: python -m

SensorManager.registerListener (.., Handler handler), example please?

拥有回忆 提交于 2020-01-01 03:21:08
问题 I don't understand how to use this method, sensorManager.registerListener(SensorEventListener listener, Sensor sensor, int rate, Handler handler); (Documentation here) 1) If it uses a SensorEventListener, then what's the purpose of the Handler? 2) Please give an example of a handler I could pass to it? Thanks! 回答1: If it uses a SensorEventListener, then what's the purpose of the Handler? If I had to guess, it is so you can get your sensor events delivered on a background thread (e.g., a

信号处理

非 Y 不嫁゛ 提交于 2020-01-01 00:26:10
1 linux系统中对信号的处理主要由signal和sigaction函数来完成 Signal函数用来设置进程在接收到信号时的动作 #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum,sighandler_t handler); signal会根据参数signum指定的信号编号来设置该信号的处理函数。当指定的信号到达时就会跳转到参数handler指定的函数执行。如果参数handler不是函数指针,最必须是常数SIG_IGN(忽略该信号)或者SIG_DFL(对该信号执行默认操作)。 signal函数执行成功时返回以前的信号处理函数指针,当有错误发生时返回SIG_ERR(-1) int sigaction(int signum,const struct sigaction *act, struct sigaction *oldact); 2 信号处理函数的返回 setjmp/longjmp 使用longjmp可以跳转到setjmp设置的位置 #include <setjmp.h> int setjmp(jmp_buf env); void longjmp(jmp_buf env,int val); sigsetjmp/siglongjmp 和setjmp

转:步步LINUX C--进程间通信(二)信号

折月煮酒 提交于 2020-01-01 00:25:11
源地址: http://blog.csdn.net/jmy5945hh/article/details/7529651 linux间进程通信的方法在前一篇文章中已有详细介绍。 http://blog.csdn.net/jmy5945hh/article/details/7350564 本篇详细介绍及代码测试第二种方式,即 信号(Signal)。 1 信号简介 信号全称为软中断信号,主要用于进程控制。 信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息。 信号的来源包括硬件来源与软件来源。 生存周期从被创建开始,到进程接收到信号。某些情况下允许信号排队。 内核对信号的处理机制: (1)发送信号的方法为在进程所在的进程表项的信号域设置对应于该信号的位。 (2)睡眠进程的睡眠优先级高于信号时,信号不会唤醒进程。 (3)内核处理信号的时机是进程从内核态返回用户态时或者进程要切换到低优先级睡眠态时。 (4)处理方法:退出,忽略或通过signal函数调用用户定义函数处理。 典型应用:LINUX下程序在命令行运行时,按下CTRL+C将向程序发送SIGINT信号,强制进程结束。 在命令行使用kill -l命令可以列出所有LINUX系统支持的信号 值得注意的是,信号的编号不是连续的

进程间的通信—信号

限于喜欢 提交于 2020-01-01 00:21:37
一、信号及信号源 1、信号本质   信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。   信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息。 2、信号来源   信号事件的发生有两个来源: 硬件来源(比如我们按下了键盘或者其它硬件故障); 软件来源,最常用发送信号的系统函数是kill, raise, alarm和setitimer以及sigqueue函数,软件来源还包括一些非法运算等操作。 二、进程对信号的响应   进程可以通过三种方式来响应一个信号: 忽略信号,即对信号不做任何处理,其中,有两个信号不能忽略:SIGKILL及SIGSTOP; 捕捉信号。定义信号处理函数,当信号发生时,执行相应的处理函数; 执行缺省操作,Linux对每种信号都规定了默认操作。注意,进程对实时信号的缺省反应是进程终止。   Linux究竟采用上述三种方式的哪一个来响应信号,取决于传递给相应API函数的参数。 三、信号的安装   如果进程要处理某一信号,那么就要在进程中安装该信号

Android: Calling non-static methods from a static Handler class

不羁岁月 提交于 2019-12-31 22:27:30
问题 Given this code: public class MainActivity extends FragmentActivity implements ActionBar.TabListener { public static final int MESSAGE_NOT_CONNECTED = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); } // ------------------------------------------------- public final void setStatus(int Rid) { final ActionBar actionBar = getActionBar(); actionBar.setSubtitle(Rid); } // --------------------------------------

express.js 路由实现解读

﹥>﹥吖頭↗ 提交于 2019-12-31 17:50:57
关于express.js的实现源码解读,版本为 4.14。主要为路由部分。 一个Web框架最重要的模块是路由功能,该模块的目标是:能够根据method、path匹配需要执行的方法,并在定义的方法中提供有关请求和回应的上下文。 模块声明 express 中的路由模块由 Router 完成,通过完成调用 Router() 得到一个 router 的实例, router 既是一个对象,也是一个函数,原因是实现了类似C++中的 () 重载方法,实质指向了对象的 handle 方法。 router 的定义位于router/index.js中。 // router/index.js - line 42 var proto = module.exports = function(options) { var opts = options || {}; // like operator() in C++ function router(req, res, next) { router.handle(req, res, next); } //... } 接口定义 router 对外(即开发者)提供了路由规则定义的接口: get 、 put 等对应于HTTP method类别,函数签名都是 $method(path, fn(req, res), ...) ,接口的方法通过元编程动态定义生成

2019年springmvc面试高频题(java)

南笙酒味 提交于 2019-12-31 10:06:04
前言 2019即将过去,伴随我们即将迎来的又是新的一年,过完春节,马上又要迎来新的金三银四面试季。那么,作为程序猿的你,是否真的有所准备的呢,亦或是安于本职工作,继续做好手头上的事情。 当然,不论选择如何,假如你真的准备在之后的金三银四跳槽的话,那么作为一个Java工程师,就不可不看了。如何在几个月的时间里,快速的为即将到来的面试进行充分的准备呢? 1、什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于MVC架构的用来简化web应用程序开发的应用开发框架,它是Spring的一个模块,无需中间整合层来整合 ,它和Struts2一样都属于表现层的框架。在web模型中,MVC是一种很流行的框架,通过把Model,View,Controller分离,把较为复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。 2、SpringMVC的流程? 1、用户发送请求至前端控制器DispatcherServlet; 2、DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle; 3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet; 4