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
}
}