A. google chrome浏览器中 查看框架的源代码,具体是干什么用的,为什么有些网页有这个选项,有些没有。
之所以有些网页有、有些网页没有,那是因为不同网页编写的代码会不同(具体哪里不同我就不懂了),能够识别出框架源代码的网页,就自然会出现“查看框架的源代码”选项,反之则没有。
之所以你看到只有Chrome浏览器上有这种开发工具,是因为目前只有Chrome浏览器的开发工具是最全的,其他浏览器(比如火狐),也有自己的开发工具,但是种类至少目前还没有比Chrome齐全。
具体功能是查看以及编辑网页java或.net代码,但是这种开发工具十分强大,具备强大的运算能力,绝不是普通浏览器“查看网页源代码”这么低门槛的。
和其他浏览器的区别?这个外行看热闹,内行看门道。各个浏览器厂家都推出了自家的网页开发工具,所以只有开发人员才切身知道它的强大之处和彼此区别;对于一般人其实因为都没用,所以比不比较之间的区别,其实已经没意义了。。追问:
正常情况下,有些网站是访问者就能看框架源代码的,是不是,可以说,从某种情况来说,也泄露了,网站的源码。如,下面的语句:
function WebForm_CallbackComplete() { for (var i = 0; i < __pendingCallbacks.length; i++) { callbackObject = __pendingCallbacks[i]; if (callbackObject && callbackObject.xmlRequest && (callbackObject.xmlRequest.readyState == 4)) { if (!__pendingCallbacks[i].async) { __synchronousCallBackIndex = -1; } __pendingCallbacks[i] = null; var callbackFrameID = "__CALLBACKFRAME" + i; var xmlRequestFrame = document.getElementById(callbackFrameID); if (xmlRequestFrame) { xmlRequestFrame.parentNode.removeChild(xmlRequestFrame); } WebForm_ExecuteCallback(callbackObject); } }}function WebForm_ExecuteCallback(callbackObject) { var response = callbackObject.xmlRequest.responseText; if (response.charAt(0) == "s") { if ((typeof(callbackObject.eventCallback) != "undefined") && (callbackObject.eventCallback != null)) { callbackObject.eventCallback(response.substring(1), callbackObject.context); } } else if (response.charAt(0) == "e") { if ((typeof(callbackObject.errorCallback) != "undefined") && (callbackObject.errorCallback != null)) { callbackObject.errorCallback(response.substring(1), callbackObject.context); } } else { var separatorIndex = response.indexOf("|"); if (separatorIndex != -1) { var validationFieldLength = parseInt(response.substring(0, separatorIndex));
if (callbackObject && callbackObje此处省去一万字
这些都被看到了,万一被坏人利用,确实会产生安全隐患,比如依据这些代码的漏洞虚构出仿冒网站。。这是该网站管理者编写时的疏忽,或者对框架语言欠考虑造成的,是不太应该的。所以你的猜测也不无道理,我同意你的观点。
B. 如何阻止tornadoWeb服务器
下面简单的例子存在tornado的网页上:import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
一旦tornado.ioloop.IOLoop.instance().start()被调用时,它会阻止程序(或当前线程)。阅读的源代码IOLoop对象给出这个例子中的stop函数:To use asynchronous methods from otherwise-synchronous code (such as
unit tests), you can start and stop the event loop like this:
ioloop = IOLoop()
async_method(ioloop=ioloop, callback=ioloop.stop)
ioloop.start()
ioloop.start() will return after async_method has run its callback,
whether that callback was invoked before or after ioloop.start.
不过,我不知道如何整合到这一点我的程序。其实我有一个封装了Web服务器的类(有它自己的start和stop函数),但只要我打电话开始 CodeGo.net,程序(或测试)当然会块呢。 我试图启动另一个进程中的Web服务器(使用multiprocessing包)。这是包装的Web服务器的类:class Server:
def __init__(self, port=8888):
self.application = tornado.web.Application([ (r"/", Handler) ])
def server_thread(application, port):
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(port)
tornado.ioloop.IOLoop.instance().start()
self.process = Process(target=server_thread,
args=(self.application, port,))
def start(self):
self.process.start()
def stop(self):
ioloop = tornado.ioloop.IOLoop.instance()
ioloop.add_callback(ioloop.stop)
然而,停止似乎并不因为它仍然在接下来的测试运行,即使有这样的测试装置完全停止Web服务器:def setup_method(self, _function):
self.server = Server()
self.server.start()
time.sleep(0.5) # Wait for web server to start
def teardown_method(self, _function):
self.kstore.stop()
time.sleep(0.5)
我如何开始并从一个Python程序停止tornadoWeb服务器?
本文地址 :CodeGo.net/274277/
-------------------------------------------------------------------------------------------------------------------------
1. 我只是碰到了这一点,并发现这个问题我自己,从这个线程了下面。我只是把我的工作独立tornado代码(从所有的例子复制),并提出了实际的启动代码放到一个函数。然后我打电话给函数作为线程的线程。我的情况不同的线程调用是从我的,我刚才导入的startTornado和stopTornado例程现有的代码完成的。 以上的建议,工作带来极大的,所以我想我会提供缺少的示例代码。我在FC16系统在Linux下测试此代码(和固定我最初的O型)。import tornado.ioloop, tornado.web
class Handler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([ (r"/", Handler) ])
def startTornado():
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
def stopTornado():
tornado.ioloop.IOLoop.instance().stop()
if __name__ == "__main__":
import time, threading
threading.Thread(target=startTornado).start()
print "Your web server will self destruct in 2 minutes"
time.sleep(120)
stopTornado()
希望这有助于下一个人。
2. 要停止整个ioloop您只需调用ioloop。当你完成了单元测试。 (那唯一的(线程是ioloop.add_callback CodeGo.net,也就是说,如果单元测试是由另一个线程中执行,你可以包装在一个回调停止调用) 如果它不足以阻止HTTP Web服务器调用的httpserver.stop()方法
3. 这里是解决如何从另一个线程停止Torando。提供了一个很好的提示,但一段时间才能真正明白这工作的最后一个例子。 请看下面:import threading
import tornado.ioloop
import tornado.web
import time
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world!\n")
def start_tornado(*args, **kwargs):
application = tornado.web.Application([
(r"/", MainHandler),
])
application.listen(8888)
print "Starting Torando"
tornado.ioloop.IOLoop.instance().start()
print "Tornado finished"
def stop_tornado():
ioloop = tornado.ioloop.IOLoop.instance()
ioloop.add_callback(lambda x: x.stop(), ioloop)
print "Asked Tornado to exit"
def main():
t = threading.Thread(target=start_tornado)
t.start()
time.sleep(5)
stop_tornado()
t.join()
if __name__ == "__main__":
main()
4. tornado的IOloop.instance()有troublemultiprocessing.Process下运行时,从外部的信号停止。 唯一的解决办法我了的作品始终是Process.terminate():import tornado.ioloop, tornado.web
import time
import multiprocessing
class Handler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([ (r"/", Handler) ])
class TornadoStop(Exception):
pass
def stop():
raise TornadoStop
class worker(multiprocessing.Process):
def __init__(self):
multiprocessing.Process.__init__(self)
application.listen(8888)
self.ioloop = tornado.ioloop.IOLoop.instance()
def run(self):
self.ioloop.start()
def stop(self, timeout = 0):
self.ioloop.stop()
time.sleep(timeout)
self.terminate()
if __name__ == "__main__":
w = worker()
print 'starting server'
w.start()
t = 2
print 'waiting {} seconds before stopping'.format(t)
for i in range(t):
time.sleep(1)
print i
print 'stopping'
w.stop(1)
print 'stopped'
C. 如何给chromium中v8 给JS新增 API
就我个人的体会,按照便利性的程序来说, synchronous external function 是最简单也是最能让客户端人员接受的,简单的代码,同步、无回调,很直接。但一旦你真这么干,后面的可维护性、安全性,以及性能都是问题。
从封装度、安全性,以及后期合 chromium 版本的角度来说,优先顺序为 extension( chrome.runtime)、 chrome.send() 、external、v8 。
个人推荐 extension API,设计得非常棒,基本上不用动 chromium 源码直接就能用,甚至 chrome 自己的一些功能都是用这个实现的,例如书签管理器。
如果你不想用 extension 的话,最好也好好看一下它是如何设计的,命名规范、回调绑定等等。按照很多客户端人员的恶习可能会强行开撸 external ,后面维护起来会相当恶心。
D. google chrome浏览器中 查看框架的源代码,具体是干什么用的,为什么有些网页有这个选项,有些没有。
之所以你看到只有Chrome浏览器上有这种开发工具,是因为目前只有Chrome浏览器的开发工具是最全的,其他浏览器(比如火狐),也有自己的开发工具,但是种类至少目前还没有比Chrome齐全。 具体功能是查看以及编辑网页java或.net代码,但是这种开发工具十分强大,具备强大的运算能力,绝不是普通浏览器“查看网页源代码”这么低门槛的。 和其他浏览器的区别?这个外行看热闹,内行看门道。各个浏览器厂家都推出了自家的网页开发工具,所以只有开发人员才切身知道它的强大之处和彼此区别;对于一般人其实因为都没用,所以比不比较之间的区别,其实已经没意义了。追问: 正常情况下,有些网站是访问者就能看框架源代码的,是不是,可以说,从某种情况来说,也泄露了,网站的源码。如,下面的语句: function WebForm_CallbackComplete() { for (var i = 0; i < __pendingCallbacks.length; i++) { callbackObject = __pendingCallbacks[i]; if (callbackObject && callbackObject.xmlRequest && (callbackObject.xmlRequest.readyState == 4)) { if (!__pendingCallbacks[i].async) { __synchronousCallBackIndex = -1; } __pendingCallbacks[i] = null; var callbackFrameID = "__CALLBACKFRAME" + i; var xmlRequestFrame = document.getElementById(callbackFrameID); if (xmlRequestFrame) { xmlRequestFrame.parentNode.removeChild(xmlRequestFrame); } WebForm_ExecuteCallback(callbackObject); } }}function WebForm_ExecuteCallback(callbackObject) { var response = callbackObject.xmlRequest.responseText; if (response.charAt(0) == "s") { if ((typeof(callbackObject.eventCallback) != "undefined") && (callbackObject.eventCallback != null)) { callbackObject.eventCallback(response.substring(1), callbackObject.context); } } else if (response.charAt(0) == "e") { if ((typeof(callbackObject.errorCallback) != "undefined") && (callbackObject.errorCallback != null)) { callbackObject.errorCallback(response.substring(1), callbackObject.context); } } else { var separatorIndex = response.indexOf("|"); if (separatorIndex != -1) { var validationFieldLength = parseInt(response.substring(0, separatorIndex)); if (callbackObject && callbackObje此处省去一万字 这些都被看到了,万一被坏人利用,确实会产生安全隐患,比如依据这些代码的漏洞虚构出仿冒网站。这是该网站管理者编写时的疏忽,或者对框架语言欠考虑造成的,是不太应该的。所以你的猜测也不无道理,我同意你的观点。
E. 有没有windows7调用ble协议栈
用户模式及协议栈
1.文件传输模式
文件传输模式提供两终端间的数据通信功能,可传输后缀为.xls、.ppt、.wav、.jpg和.doc的文件(但并不限于这几种),以及完整的文件夹、目录或多媒体数据流等,提供远端文件夹浏览功能。文件传输协议栈如图2所示。
完整的协议栈包括蓝牙专用协议(如连接管理协议LMP和逻辑链路控制应用协议L2CAP)以及非专用协议(如对象交换协议OBEX和用户数据报协议UDP)。设计协议和协议栈的主要原则是尽可能利用现有的各种高层协议,保证现有协议与蓝牙技术的融合以及各种应用之间的互操作,充分利用兼容蓝牙技术规范的软硬件系统。蓝牙技术规范的开放性保证了设备制造商可以自由地选用其专用协议或习惯使用的公共协议,在蓝牙技术规范基础上开发新的应用。
android蓝牙系统分为四个层次,内核层、BlueZ库、BlueTooth的适配库、BlueTooth的JNI部分、Java框架层、应用层。下面先来分析Android的蓝牙协议栈。
Android的蓝牙协议栈采用BlueZ来实现,BlueZ分为两部分:内核代码和用户态程序及工具集。
内核代码主要由BlueZ核心协议和驱动程序组成;蓝牙协议实现在内核源代码net/bluetooth中,驱动程序位于内核源代码目录 driver/bluetooth中。用户态程序及工具集主要包括应用程序接口和BlueZ工具集,位于Android源代码目录externel /bluetooth(注:Android版本不一样,有的在externel/bluez目录下)中。
1、蓝牙协议栈
蓝牙协议栈的体系结构由底层硬件模块、中间协议层和高端应用层三部分组成。
一、底层硬件模块
组成:
链路管理协议(Link ManagerProtocol,LMP);
基带(Base Band,BB);
射频(Radio Frequency,RF)。
功能:
射频(RF)通过2.4GHz的ISM频段实现数据流的过滤和传输。
基带(BB)提供两种不同的物理链路,即同步面向连接链路(Synchronous Connection Oriented,SCO)和异步无连接链路(AsynchronousConnection Less,ACL),负责跳频和蓝牙数据,及信息帧的传输,且对所有类型的数据包提供不同层次的前向纠错码(Frequency Error Correction,FEC)或循环冗余度差错校验(CyclicRendancy Check,CRC)。
链路管理协议(LMP)负责两个或多个设备链路的建立和拆除,及链路的安全和控制,如鉴权和加密、控制和协商基带包的大小等,它为上层软件模块提供了不同的访问入口。
主机控制器接口(HostController Interface,HCI)是蓝牙协议中软硬件之间的接口,提供了一个调用下层BB、LMP、状态和控制寄存器等硬件的统一命令,上下两个模块接口之间的消息和数据的传递必须通过HCI的解释才能进行。
二、中间协议层
组成:
逻辑链路控制和适配协议(LogicalLink Control and Adaptation Protocol,L2CAP);
服务发现协议(ServiceDiscovery Protocol,SDP);
串口仿真协议(或称线缆替换协议RFCOMM);
二进制电话控制协议(TelephonyControlprotocol Spectocol,TCS)。
功能:
L2CAP位于基带(BB)之上,向上层提供面向连接的和无连接的数据服务,它主要完成数据的拆装、服务质量控制、协议的复用、分组的分割和重组,及组提取等功能。
SDP是一个基于客户/服务器结构的协议,它工作在L2CAP层之上,为上层应用程序提供一种机制来发现可用的服务及其属性,服务的属性包括服务的类型及该服务所需的机制或协议信息。
RFCOMM是一个仿真有线链路的无线数据仿真协议,符合ETSI标准的TS07.10串口仿真协议,它在蓝牙基带上仿真RS-232的控制和数据信号,为原先使用串行连接的上层业务提供传送能力。
TCS定义了用于蓝牙设备之间建立语音和数据呼叫的控制信令(Call Control Signalling),并负责处理蓝牙设备组的移动管理过程。
三、高端应用层
组成:
点对点协议(Point-to-PointProtocol,PPP);
传输控制协议/网络层协议(TCP/IP);
用户数据包协议(UserDatagram Protocol,UDP);
对象交换协议(ObjectExchang Protocol,OBEX);
无线应用协议(WirelessApplication Protocol,WAP);
无线应用环境(WirelessApplication Environment,WAE);
功能:
PPP定义了串行点对点链路应当如何传输因特网协议数据,主要用于LAN接入、拨号网络及传真等应用规范。
TCP/IP、UDP定义了因特网与网络相关的通信及其他类型计算机设备和外围设备之间的通信。
OBEX支持设备间的数据交换,采用客户/服务器模式提供与HTTP(超文本传输协议)相同的基本功能。可用于交换的电子商务卡、个人日程表、消息和便条等格式。
WAP用于在数字蜂窝电话和其他小型无线设备上实现因特网业务,支持移动电话浏览网页、收取电子邮件和其他基于因特网的协议。
WAE提供用于WAP电话和个人数字助理(PersonalDigital Assistant,PDA)所需的各种应用软件。
2、android与蓝牙协议栈的关系
蓝牙系统的核心是BlueZ,因此JNI和上层都围绕跟BlueZ的沟通进行。JNI和android应用层,跟BlueZ沟通的主要手段是D- BUS,这是一套被广泛采用的IPC通信机制,跟Android框架使用的Binder类似。BlueZ以D-BUS为基础,给其他部分提供主要接口。
F. MSP430系列单片机跟蓝牙串口模块相连的是哪个接口啊
msp430的15、16系列的 还有2系列的都有I2c接口 程序源代码 ti网站上有 直接下就可以 每一种都有相应的code library。
贴一个2274的i2c代码吧 希望对你有用
include "msp430x22x4.h"
unsigned int RxByteCtr;
unsigned int RxWord;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= 0x01; // P1.0 output
P3SEL |= 0x06; // Assign I2C pins to USCI_B0
UCB0CTL1 |= UCSWRST; // Enable SW reset
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset
UCB0BR0 = 12; // fSCL = SMCLK/12 = ~100kHz
UCB0BR1 = 0;
UCB0I2CSA = 0x4e; // Set slave address
UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation
IE2 |= UCB0RXIE; // Enable RX interrupt
TACTL = TASSEL_2 + MC_2; // SMCLK, contmode
while (1)
{
RxByteCtr = 2; // Load RX byte counter
UCB0CTL1 |= UCTXSTT; // I2C start condition
__bis_SR_register(CPUOFF + GIE); // Enter LPM0, enable interrupts
// Remain in LPM0 until all data
// is RX'd
if (RxWord < 0x1d00) // >28C?
P1OUT &= ~0x01; // No, P1.0 = 0
else
P1OUT |= 0x01; // Yes, P1.0 = 1
__disable_interrupt();
TACCTL0 |= CCIE; // TACCR0 interrupt enabled
__bis_SR_register(CPUOFF + GIE); // Enter LPM0, enable interrupts
// Remain in LPM0 until TACCR0
// interrupt occurs
TACCTL0 &= ~CCIE; // TACCR0 interrupt disabled
}
}
#pragma vector = TIMERA0_VECTOR
__interrupt void TA0_ISR(void)
{
__bic_SR_register_on_exit(CPUOFF); // Exit LPM0
}
// The USCIAB0TX_ISR is structured such that it can be used to receive any
// 2+ number of bytes by pre-loading RxByteCtr with the byte count.
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
RxByteCtr--; // Decrement RX byte counter
if (RxByteCtr)
{
RxWord = (unsigned int)UCB0RXBUF << 8; // Get received byte
if (RxByteCtr == 1) // Only one byte left?
UCB0CTL1 |= UCTXSTP; // Generate I2C stop condition
}
else
{
RxWord |= UCB0RXBUF; // Get final received byte,
// Combine MSB and LSB
__bic_SR_register_on_exit(CPUOFF); // Exit LPM0
}
}