我已成功连接到usb调制解调器,客户端可以通过tcp连接到我的反应器。listenTCP,从调制解调器接收的数据将发送回客户端。我想把从客户端接收到的数据发送到调制解调器..我正在努力使它工作。任何帮助都将不胜感激!代码:
from twisted.internet import win32eventreactor
win32eventreactor.install()
from twisted.internet import reactor
from twisted.internet.serialport import SerialPort
from twisted.internet.protocol import Protocol, Factory
from twisted.python import log
import sys
log.startLogging(sys.stdout)
client_list = []#TCP clients connecting to me
class USBClient(Protocol):
def connectionFailed(self):
print "Connection Failed:", self
reactor.stop()
def connectionMade(self):
print 'Connected to USB modem'
USBClient.sendLine(self, 'AT\r\n')
def dataReceived(self, data):
print "Data received", repr(data)
print "Data received! with %d bytes!" % len(data)
#check & perhaps modify response and return to client
for cli in client_list:
cli.notifyClient(data)
pass
def lineReceived(self, line):
print "Line received", repr(line)
def sendLine(self, cmd):
print cmd
self.transport.write(cmd + "\r\n")
def outReceived(self, data):
print "outReceived! with %d bytes!" % len(data)
self.data = self.data + data
class CommandRx(Protocol):
def connectionMade(self):
print 'Connection received from tcp..'
client_list.append(self)
def dataReceived(self, data):
print 'Command receive', repr(data)
#Build command, if ok, send to serial port
#????
def connectionLost(self, reason):
print 'Connection lost', reason
if self in client_list:
print "Removing " + str(self)
client_list.remove(self)
def notifyClient(self, data):
self.transport.write(data)
class CommandRxFactory(Factory):
protocol = CommandRx
def __init__(self):
client_list = []
if __name__ == '__main__':
reactor.listenTCP(8000, CommandRxFactory())
SerialPort(USBClient(), 'COM8', reactor, baudrate='19200')
reactor.run()
你的问题不在于twisted,而在于python。阅读此常见问题条目:
问题是,如果您想在串行连接协议中向TCP连接的客户端发送数据,只需向协议传递一个对工厂的引用,这样您就可以使用该引用来建立桥接。
下面是一些大致实现此目的的示例代码:
初始化时,传递引用:
谢谢,开始工作了。无法让def notifyAll将数据发送到我的调制解调器..是这样的吗:客户端列表中的for cli:cli.transport.write(data)
新代码:
相关问题 更多 >
编程相关推荐