美文网首页
Python Tcp数据传输

Python Tcp数据传输

作者: sky2016 | 来源:发表于2017-09-04 15:53 被阅读678次

需要用到python中的socket模块和struct模块,所以首先需要导入进来

 import socket
 import struct

接着是连接

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 7199)
test_getalldisk(s)

在这里假设C中通讯协议头定义为:

struct Header
{
  unsigned short wMajorFunction;    /// 主命令
  unsigned short wMinorFunction;    /// 副命令
  unsigned long dwRetStatus;        /// 返回值
  unsigned long dwDataSize;     /// 头后面数据长度
};

传输时wMajorFunction值需要设为50,其他值为0,则用python struct模块进行包装:

data = struct.pack('>HHLL', 50, 0, 0, 0)

struct模块用法可以参考:
https://docs.python.org/3/library/struct.html#format-characters

test_getalldisk()函数定义:

def test_getalldisk(s):
  header_size = struct.calcsize('>HHLL')
  print header_size

  data = struct.pack('>HHLL', 50, 0, 0, 0)

  s.sendall(data) #发送请求数据包头

  recv_header = recvall(s, header_size) #接收回应数据包头
  if len(recv_header) != header_size:
      return

  header = struct.unpack('>HHLL', recv_header)
  body_size = int(header[-1]) #后续数据长度

  body = recvall(s, body_size) #接收后续数据
  print body

python socket 提供了sendall()函数,却没有提供recvall()函数,只好自己实现一个:

def recvall(s, recv_size):
  recv_buffer = []
  while 1:
    data = s.recv(recv_size)
    if not data:
        break
    recv_buffer.extend(data)
    if len(recv_buffer) == recv_size:
        break
  return ''.join(recv_buffer)

相关文章

  • Python Tcp数据传输

    需要用到python中的socket模块和struct模块,所以首先需要导入进来 接着是连接 在这里假设C中通讯协...

  • TCP的超时重传与拥塞控制

    TCP滑动窗口技术通过动态改变窗口大小来调节两台主机间数据传输。每个TCP/IP主机支持全双工数据传输,因此TCP...

  • 传输层

    TCP 传输层解决的问题是,数据传输的问题。数据传输分为不可靠传输和可靠数据传输,分别对应的是UDP协议和TCP协...

  • Qt5.8 (2).Java与Qt通信之TCP图片传输

    Java-Qt-TCP数据传输 程序描述 使用Qt建立TCP Server,用Java建立TCP Client,C...

  • 详解TCP协议,TCB,TCP的三次握手、四次挥手

    TCP协议简介 TCP全称Transmission Control Protocol,数据传输控制协议。它是一种面...

  • HTTPS从入门到放弃

    使用socket进行tcp数据传输的简单过程 Socket是TCP/UDP传输层的API, HTTP是在tcp上的...

  • TCP协议浅析

    本文将简单介绍tcp协议的基本内容,主要包括一下四部分: tcp概述 TCP可靠数据传输 TCP流量控制 TCP连...

  • TCP协议图文秒懂

    本文将简单介绍tcp协议的基本内容,主要包括一下四部分: • tcp概述 • TCP可靠数据传输 • TCP流量控...

  • 2016年8月21日笔记

    tcp TCP/IP是不同的通信协议的大集合 TCP -传输控制协议TCP用于从应用程序到网络的数据传输控制。负责...

  • 2018-11-15

    数据传输协议 一、TCP协议 TCP协议是面向连接、可靠的数据传输协议数据从应用层发下来,会在每一层加上头部信息进...

网友评论

      本文标题:Python Tcp数据传输

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