我正在进行以下项目:我创建了一个异步tcp-tcp-ip客户机/服务器连接。客户机(c#wpfgui)将消息写入服务器(Raspberry pi,Python)并等待传感器数据。服务器接收来自客户机的消息,并以循环方式发回当前传感器数据。在
独立的服务器/客户机应用程序运行良好。在下一步中,我希望使用Python中的模块。以下是我希望在单独的Python文件中实现的主要部分:
主.py
启动异步tcp服务器并在后台运行(线程)
打印从客户端接收的数据
下面是python中的代码,我有这样的方法(启动异步tcp服务器):
主.py
import thread
import logging
import socket
import asyncore
#Import async server
from AsyncServerPi_Test import Server
if __name__=='__main__':
logging.basicConfig(level=logging.DEBUG,format='%(name)s: %(message)s',)
log = logging.getLogger('main')
#parameter
ip = socket.gethostname()
port = 12345
address = (ip, port) # port 0 means the kernel gives port
dataFromPi= 'SensorData'
server = Server(address,dataFromPi) #issue with parameter dataFromPI
#dataFromClient = server.getDataFromClient() Code is not working!
#log.debug(dataFromGUI)
asyncore.loop(timeout=1) # checks all client's readable/writable every second
异步服务器PI_测试.py
^{pr2}$我对参数dataFromPi和dataFromClient有一些问题。dataFromPi是我移交服务器实例的输入参数(server=server(address,dataFromPi))。当我执行主.py文件:
error: uncaptured python exception, closing channel <AsyncServerPi_Test.Handler connected 192.168.0.108:51028 at 0x31ba7d8> (<type 'exceptions.NameError'>:global name 'dataFromPi' is not defined [C:\Python27\lib\asyncore.py|write|91] [C:\Python27\lib\asyncore.py|handle_write_event|468] [C:\Python27\lib\AsyncServerPi_Test.py|handle_write|75])
Handler('192.168.0.108', 12345): handle_close()
我检查了异步服务器pi中dataFromPi的移交_测试.py但我找不到解决办法。在
下一个问题是我无法在主.py文件。在AsyncServerPi中_测试.py文件我可以从客户端读取数据(handle_read)。我试图在handle_read中返回接收到的数据,但我认为数据的返回必须发生在server()类中。如何归档服务器类从客户机返回数据,以便打印接收到的数据main.py?在
此外,服务器应该在后台运行,这样我可以并行运行其他操作(从超声波读取传感器数据,评估…)。作为一个例子,我希望主.py应该看起来像这样:
import thread
import logging
import socket
import asyncore
#Import US
import Ultrasonic
#Import async tcp ip server
from AsyncServerPi_Test import Server
def main():
#Logging
logging.basicConfig(level=logging.DEBUG,format='%(name)s: %(message)s',)
log = logging.getLogger('main')
#Parameter for server
ip = socket.gethostname()
port = 12345
address = (ip, port) # port 0 means the kernel gives port
ultrasonicTest = Ultrasonic() # run in a seperate thread?
dataFromSensor = ultrasonicTest.readSensorData
serverTest = Server(address,dataFromSensor) # run in a seperate thread?
dataFromClient = serverTest.receivedData()
asyncore.loop(timeout=1) # checks all client's readable/writable every second
if __name__=='__main__':
main()
在这方面,我有以下问题:
为传感器创建新的线程(ultrasonicTest=Ultrasonic()):
在模块中运行线程是否更好(例如,在超声波.py而不是在主.py)
同步线程?
我对python比较陌生,在多线程方面我没有太多的经验。如果有人用python做过一些类似的项目,并能给我一些提示或类似项目的参考,那会很有帮助。在
目前没有回答
相关问题 更多 >
编程相关推荐