美文网首页
网络通信 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 机械工业出版社 【京东链接

相关文章

  • 用socket和多进程配合多线程实现简单的tcp的聊天服务器

    python中的socket套接字用于实现网络通信tcp套接字的使用流程如下: 创建套接字对象 --- cli...

  • 网络通信 Python Socket TCP

    前言 工作中遇到各种各样的网络通信。有MQTT和CoAP这样的物联网应用层协议,也有各种自定义的TCP或UDP协议...

  • CocoaAsyncSocket --Socket学习

    Socket理论 套接字(Socket)概念 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信...

  • Socket编程-tcp协议/服务器端

    Socket编程是用来做网络通信的。 理解:做网络通信的时候需要有网络协议。Socket编程有两种协议 :TCP/...

  • python10-socket

    socket网络编程 socket基于tcp、ip协议的工具 所有的网络通信都基于socketwanghzh/p/...

  • iOS面试题整理

    1.socket原理:socket中文翻译为套接字 是支持TCP/IP协议的网络通信的基本操作单元,包含网络通信必...

  • Day18总结

    一.网络通信过程TCP协议和UDP协议二.socket编程 1.socket编程定义:socket又叫套接字。指的...

  • day19

    socket套接字 socket又叫套接字,实现网络通信的python通过提供socket标准库来支持socket...

  • gen_tcp详解

    该模块 提供一组基于tcp/ip协议 socket 网络通信方法。 gen_tcp:connect/3 gen_t...

  • Python-socket模拟TCP通讯

    Python socket模拟TCP通讯 本文将介绍使用Python的socket模块创建TCP客户端和服务端的方...

网友评论

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

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