今天寫了乙個twisted例程,很順利,twisted的確不錯。但是在除錯def datareceived(self,data):的時候,突然想到,如果data引數需要傳入二進位制資料怎麼辦,於是google一下,無果。後來想了一下,會不會像php一樣不管string和binary都當作字串處理?畢竟都是弱型別。
於是,就寫了兩段**,乙個服務端,乙個客戶端。他們的工作是,客戶端讀取乙個檔案的資料,然後傳送到伺服器端,伺服器端原樣返回,然後客戶端再把返回的資料存到另乙個裡面,看看,存入的對不對(由於沒有寫buffer,所以你要試驗的話,盡量找個小,否則,可能會存下半張),結果不出我所料,和php一樣string和binary不分的,就是客戶端傳送過去的是string服務端就當字串處理,如果發過去的是binary就當binary處理(python有個struct模組 專門處理二進位制資料,和php的pack、unpack是函式一樣的,連函式名都一樣,不知道誰抄誰的)。
下面是server端**:
from twisted.internet import reactor, defer, protocol
from twisted.internet.protocol import protocol
class defe***ctory(protocol.serve***ctory):
def __init__(self):
self.deferred = defer.deferred();
class piper(protocol):
def connectionmade(self):
#self.factory.deferred.callback(self);
def datareceived(self,data):
self.transport.write(data);
#self.factory.deferred.callback((self, data));
def testcallback(data):
data[0].transport.write(data[1]);
#factory.deferred.callback
#this can only be run once.
#later calls to this or errback will raise twisted.internet.defer.alreadycallederror.
#so redefine this
data[0].factory.deferred=defer.deferred();
data[0].factory.deferred.addcallback(testcallback);
if __name__ == "__main__":
factory = defe***ctory();
factory.protocol = piper;
factory.deferred.addcallback(testcallback);
reactor.listentcp(8007,factory);
reactor.run();
然後是client端:
二進位制操作
關於二進位制操作很常見,很多筆試面試題中也有涉及,本篇主要圍繞二進位制翻轉,二進位制最高位判定和給定整數的二進位制輸出來 靈活使用二進位制的 操作。一 給定整數的二進位制翻轉 思路 可以考慮逐次翻轉得到最終的翻轉結果,具體做法,首先將所有二進位制位奇偶位逐個翻轉,然後以兩位為一對 作為整體 奇偶對逐...
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...
二進位制數反轉
1 使用了歸併排序的思路 最快 但是時間複雜度比歸併排序要小,每行 都相當於完成了一次歸併 include unsigned revbit unsigned x void main 2 把乙個32位整數按位反轉,即第1位轉到第32位,第2位轉到第31位,依次下去。一牛人寫的演算法如下 unsigne...