美文网首页
网络通信 Python Socket TCP

网络通信 Python Socket TCP

作者: xukai871105 | 来源:发表于2019-05-18 14:22 被阅读0次

    前言

    工作中遇到各种各样的网络通信。有MQTT和CoAP这样的物联网应用层协议,也有各种自定义的TCP或UDP协议。使用各种不同的计算机语言和框架开发网络通信,例如Java的Netty框架,C语言原始socket,Python Socket。各有各的使用场景,难易程度相差巨大。Netty上手困难,C语言编写复杂,Python Socket上手容易。
    本文先从最简单的Python入手,相较于其他手段(例如C Socket或Java Netty)使用Python实现一组Echo Client和Echo Server代码行数最少。

    示例简述

    • 客户端主动发送一组数据至服务器,收到服务器的响应后打印至控制台
    • 服务器收到客户端的请求后,把请求内容原样返回值客户端
    • 本例模拟,物联网终端设备与服务器通信,推荐使用bytes类型而不是string
    • 开发环境 Windows PyCharm社区版 Python3.7

    客户端示例

    echo-client

    import socket
    import binascii
    
    HOST = '127.0.0.1'
    PORT = 50007
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    
    request = bytes([0x31, 0x32, 0x33, 0x34])
    s.sendall(request )
    response = s.recv(1024)
    print('Received', binascii.hexlify(response))
    

    代码说明

    1. (HOST, PORT) python元组类型,一种不可改变的数组
    2. bytes([0x31, 0x32, 0x33, 0x34]) python字节数组,通过decode方法可解码为string类型,同理string类型通过encode方法可编码为bytes类型。另外,bytes类型为不可变类型,对应的可变类型为bytearray
    3. sendall输入参数为bytes类型,recv返回参数也为bytes类型
    4. binascii.hexlify(response) 通过HEXSTRING格式打印至控制台

    服务器示例

    echo-server

    import socket
    import binascii
    
    HOST = ''
    PORT = 50007
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen(5)
    
    while True:
        conn, address = s.accept()
        request = conn.recv(1024)
        print('Connected by', repr(address),
              'Received ', binascii.hexlify(request))
        if request:
            conn.sendall(request)
    

    代码说明

    1. accept()方法返回两个参数,conn可理解为套接字句柄,address为对端地址(客户端地址)
    2. binascii.hexlify(response),通过HEXSTRING格式打印至控制台

    运行与测试

    先启动服务器,再启动客户端。

    服务器控制器输出

    Connected by ('127.0.0.1', 65225) Receive  b'30313234'
    

    客户端控制台输出

    Received b'31323334'
    

    总结

    • 本例中的服务器示例并不能适应高并发场景
    • 本例中的客户端可用于各种调试

    相关资料

    • 本例代码仓库【 python-socket-demo
    • 物联网图书推荐 CoAP基础 徐凯《IoT开发实战: CoAP卷》 2017 机械工业出版社【 京东链接
    • 物联网图书推荐 CoAPs进阶 徐凯 崔红鹏《密码技术与物联网安全:mbedtls开发实战》2019 机械工业出版社 【京东链接

    相关文章

      网友评论

          本文标题:网络通信 Python Socket TCP

          本文链接:https://www.haomeiwen.com/subject/nphtzqtx.html