我是TCP套接字编程的新手。我有一个基于django的服务器与微控制器通信。现在,我想在服务器端实现基于TCP的socket,以便与微控制器上的TCP socket进行通信。有没有人能告诉我怎么做?我应该在我的django服务器上使用什么库?微处理器基本上每5秒打开一次套接字,并向服务器发送一个通知。在服务器端,I应该能够读取这些数据,并使用微处理器打开的这个套接字将数据发送回微处理器。
发布于 2015-03-29 19:05:22
如果您已经熟悉django,并且您的微控制器支持发送HTTP (REST)请求并可以解析Json,那么您只需添加一个常规的基于django的视图来返回json:
# views.py
from django.http import JsonResponse
def my_view(request):
# handle input here, probably using request.GET / request.POST
return JsonResponse({'status': 'OK'})但是,如果您的微控制器非常简单,并且不能执行HTTP/json,则可以使用python标准库中的简单SocketServer:
import SocketServer
class MyTCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
self.data = self.request.recv(1024).strip()
print "{} wrote:".format(self.client_address[0])
print self.data
# just send back the same data, but upper-cased
self.request.sendall(self.data.upper())
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()请记住,您仍然可以导入django的库并在SocketServer中使用django的ORM (DB)。
另一个流行的选择是使用Tornado's tcpserver
from tornado.ioloop import IOLoop
from tornado.tcpserver import TCPServer
class MyTCPServer(TCPServer):
def handle_stream(self, stream, address):
def got_data(data):
print "Input: {}".format(repr(data))
stream.write("OK", stream.close)
stream.read_until("\n", got_data)
if __name__ == '__main__':
server = MyTCPServer()
server.listen(9876)
IOLoop.instance().start()https://stackoverflow.com/questions/29307916
复制相似问题