2012-05-01 45 views
1

我正在建立一個TCP/IP協議的套接字,並且由於我的接收器正在處理int8u_t我想知道這種方法是否正確。創建扭曲的TCP套接字併發送測試值

在連接服務器有一個值mode=int(42)發送到在def connectionMade(self)完成的接收器。但我知道會有一些衝突,因爲在Python中的正常int是32位,我的接收器只有8位,我可以以某種方式投它或在int8u創建它?

from twisted.internet.protocol import Protocol, Factory 
from twisted.internet import reactor 

class TestSocket(Protocol): 
     def connectionMade(self): 
       mode=int(42) 
       self.factory.clients.append(self) 
       self.transport.write(mode) 
       print "clients are ", self.factory.clients 

     def connectionLost(self, reason): 
      self.factory.clients.remove(self) 

     def dataReceived(self, data): 
       #print "data is ", data 
       #a = data.split(':') 
       print data 
       print "-------------------" 

     def message(self, message): 
       self.transport.write(message + '\n') 

factory = Factory() 
factory.protocol = TestSocket() 
factory.clients = [] 

reactor.listenTCP(30002, factory) 
print "TestSocket server started" 
reactor.run() 
+1

'模式= INT(42)'可以更好地表述爲'模式= 42' –

回答

1

使用結構

from struct import * 
mode = pack("h", 42) # 'h' == short 

編輯:顯然,你想pack("I", 42)

+0

'模式=包( 「I」, 42)'做了詭計。完善! – JavaCake

+0

Voila ;-)謝謝。 – JavaCake

+0

評論!爲什麼downvote! –

2

可以使用numpy做到這一點:

import numpy 
mode = numpy.int8(42) # int8 Byte (-128 to 127) 

可以使用numpyhere找到類型和類型 之間轉換的詳細信息。