Django TCP套接字通信 [英] Django TCP socket communication

查看:1743
本文介绍了Django TCP套接字通信的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新的TCP套接字编程。我有一个基于django的服务器与微控制器通信。现在,我想在服务器端实现基于TCP的套接字,以便与微控制器上的TCP套接字进行通信。任何人都可以给我一个如何做到这一点的想法?我应该在django服务器上使用哪些库微处理器每隔5秒打开套接字,并向服务器发送通知。我在服务器端应该可以读取这个数据,并使用微处理器打开的这个插槽将数据送回微处理器。

解决方案

如果您已经熟悉django,并且您的微控制器支持发送HTTP(REST)请求并且可以解析Json,则可以添加一个返回json的常规django视图:

 #views.py 
from django.http import JsonResponse
def my_view(request):
#handle这里可能使用请求。 GET / request.POST
return JsonResponse({'status':'OK'})

但是,如果您的微控制器非常简单,无法执行HTTP / json,则可以使用简单的 SocketServer ,而不是从python的标准库:

  import SocketServer 

类MyTCPHandler(Socke tServer.BaseRequestHandler):

def handle(self):
self.data = self.request.recv(1024).strip()
print{}写道: .format(self.client_address [0])
print self.data
#只是发回相同的数据,但是上面的
self.request.sendall(self.data.upper )

如果__name__ ==__main__:
HOST,PORT =localhost,9999
server = SocketServer.TCPServer((HOST,PORT),MyTCPHandler)
server.serve_forever()

请记住,您仍然可以导入django的库并使用django的ORM (DB)在SocketServer内。



另一个流行的选项是使用 Tornado的tcpserver

  from tornado.ioloop import IOLoop 
from tornado .tcpserver import TCPServer


class MyTCPServer(TCPServer):
def handle_stream(self,stream,addr $)
def got_data(data):
printInput:{}。format(repr(data))
stream.write(OK,stream.close)

stream.read_until(\\\
,got_data)


如果__name__ =='__main__':
server = MyTCPServer()
server.listen(9876)
IOLoop.instance()。start()


I am new to TCP socket programming. I have a django based server communicating with a microcontroller. Now, I want to implement TCP based socket on the server side in order to communicate with the TCP socket on the microcontroller. Can anyone give me an idea on how to do this ? What libraries should I use on my django server The microprocessor basically opens the socket every 5 seconds and sends a notification to the server. I on the server side should be able to read this and pump data back to the microprocessor using this socket which was opened by the microprocessor.

解决方案

If you are already familiar with django, and your microcontroller supports sending HTTP (REST) requests and can parse Json , you can just add a regular django based view that returns 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'})

However, if your microcontroller is very simple and cannot do HTTP/json, you can use a simple SocketServer from python's standard library instead:

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()

Keep in mind you can still import django's libraries and use django's ORM (DB) inside a SocketServer.

Another popular option is to use 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()

这篇关于Django TCP套接字通信的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆