`
hanyh
  • 浏览: 235237 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python使用struct解析结构体

阅读更多
http://blog.chinaunix.net/u2/79621/showart_1210923.html
#!/bin/python
from socket import *
from time import time,ctime

host = ""
port = 12345
bufsize = 1024
addr = (host,port)

socket = socket(AF_INET,SOCK_STREAM)
socket.bind(addr)
socket.listen(5)

try:
	while 1:
		print "waiting for connection..."
		client,addr = socket.accept()
		print "..connected from :",addr
		while 1:
			data = client.recv(bufsize)
			if not data:break
			print "received:",len(data)
			import struct
			ip = struct.unpack("HHIII0l",data)
			print "ip[0]",ip[0]
			print "ip[1]",ip[1]
			print "ip[2]",ip[2]
			print "ip[3]",ip[3]
			break
		client.close()
except EOFError:
	print 'EOFError  Occur'
except KeyboardInterrupt:
	print 'KeyboardInterrupt catched'
finally:
	socket.close()


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <errno.h>

extern int errno;

int main(int argc, char **argv)
{
    int    sockfd;
    struct sockaddr_in  servaddr;

    if (argc != 3)
        fprintf(stderr, "usage: cmd  <IP> <port>\n");

    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        fprintf(stderr, "socket create error.\n");
        exit(1);
    }  

    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(atoi(argv[2]));
    if ( inet_pton(AF_INET, argv[1], &(servaddr.sin_addr)) < 0) {
        fprintf(stderr, "inet_pton error: %s\n", strerror(errno));
        close(sockfd);
        return -1;
    }  

    if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) != 0) {
        fprintf(stderr, "connect fail: %s\n", strerror(errno));
        exit(1);
    }  

    int len = sizeof(struct sockaddr_in);
    char send[len + 1];

    memset(send, 0, len+1);
    memcpy(send, &servaddr, len);
   
     //unsigned char sin_len = servaddr.sin_len;
    unsigned short sa_family = servaddr.sin_family;
    unsigned short sin_port = servaddr.sin_port;
    unsigned int  s_addr = servaddr.sin_addr.s_addr;

    printf("%u %u %u\n", sa_family, sin_port, s_addr);
    int n=0;
    n = write(sockfd, send, len);
    if (n != len) {
        printf("write error\n");
    }

    printf("write over\n");
    exit(0);
}
分享到:
评论

相关推荐

    python 和C语言数据结构解析于构建

    描述部分提供了对问题背景的简要说明:“Python与C语言进行网络通信时,由于C语言常用`struct`来组织数据,故在Python端需要能够解析和重构这些`struct`数据。”这里的关键在于如何利用Python内置的`struct`模块来...

    python.struct_helper_0_01

    `andrew`和`ply`这两个文件名没有提供足够的信息来确定它们的具体内容,但它们可能包含了使用`struct_helper`的示例代码或相关的编译器/解析器工具。 在Python中,与C结构体交互的一个常见场景是在读写二进制文件,...

    Python使用struct处理二进制的实例详解

    Python使用struct处理二进制的实例详解 有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体.  struct模块中最...

    python解析excel数据成proto、idl或者struct格式

    本主题聚焦于如何使用Python语言将Excel数据解析并转化为proto、IDL(Interface Definition Language)或struct格式。这三种格式各有其特点和用途,通常在分布式系统、网络通信以及数据序列化中扮演重要角色。 1. *...

    vector DBC文件转换为C结构体

    在实际编程中,我们经常需要将DBC文件中的信息转化为C语言的结构体,以便于在程序中直接使用。这个过程被称为DBC文件解析。 "vector DBC文件转换为C结构体"是一个关键任务,因为它能帮助开发者高效地处理CAN消息。...

    Python-一个易懂的类C结构解析Python库

    本文将重点介绍标题提到的“Python-一个易懂的类C结构解析Python库”,以及如何使用这个库来处理和解析类C结构。 该库的设计目标是提供一个简单易用的接口,让Python程序员能够方便地操作类似C语言的结构体。在...

    Python使用struct处理二进制(pack和unpack用法)

    这时,Python的`struct`模块提供了一种有效的方法来处理这些数据,尤其是与C语言中的结构体类似的数据。`struct`模块包含了三个关键函数:`pack()`、`unpack()`和`calcsize()`。 1. `pack(fmt, v1, v2, ...)`: 这个...

    struct.nim:Nim的类似Python的“ struct”

    在Nim编程语言中,`struct.nim`模块提供了一种类似于Python的结构化数据处理方式,使得开发者能够方便地处理二进制数据流。这个模块对于那些需要处理底层数据结构,例如网络协议解析、文件格式读写或者系统编程的...

    Python中struct模块对字节流/二进制流的操作教程

    在C语言中,我们有结构体(struct),而在Python中,我们可以使用`struct`模块来处理类似的数据结构。虽然Python本身没有内建的结构体类型,但通过`pack()`和`unpack()`,我们可以模拟C语言的结构体操作。例如,可以...

    pickle与struct模块简介

    它提供了将Python数据类型转换为字节流(通常用于网络传输或文件存储),以及将字节流解析回Python数据类型的功能。 #### 主要功能 - **数据转换**:按照指定格式将Python数据转换为字符串(字节流)。 - **数据...

    深入源码解析Python中的对象与类型

    ### 深入源码解析Python中的对象与类型 #### 引言 Python作为一种动态类型的语言,其对象和类型的概念是其核心基础之一。本文将深入探讨Python内部如何实现对象和类型,特别是对象的引用计数机制以及类型的定义。...

    结构体数组详细介绍.zip

    在编程领域,结构体数组是一种非常重要的数据结构,它结合了结构体(Struct)和数组的概念,使得我们能够高效地存储和操作具有多种数据类型的集合。在这个“结构体数组详细介绍”的压缩包中,很显然,我们将深入探讨...

    struct.zip

    这个压缩包“struct.zip”可能包含了一系列的代码示例,用于教授如何在不同语言中使用结构体,以及如何处理结构化数据。学习和理解这些概念对于提升编程技能,尤其是系统级编程和底层开发能力至关重要。

    struct2官方api,很详细,可离线

    6. JSON转换:Struct2 支持与JSON格式的互转,`to_json()` 可将数据结构转换为JSON字符串,`from_json(json_str)` 则可以将JSON字符串解析为Struct2对象。 三、Struct2进阶用法 1. 自定义类型:你可以定义自己的...

    CppHeaderParser:解析 C++ 头文件并生成表示类的数据结构。repo 托管在 https 上

    Python 包“CppHeaderParser” 目的:解析C++头文件,生成表示类的数据结构添加一名作者许可证: BSD 需要外部模块: PLY 快速开始:: #include &lt;vector&gt;#include &lt;string&gt;#define DEF_1 1#define OS_NAME "Linux...

    用C语言扩展Python的功能.pdf

    在这个例子中,我们定义了一个名为`add`的函数,它使用Python的C API来解析输入参数并返回结果。 ##### 3.2 编译C代码 为了使用这个扩展模块,需要先将其编译成一个共享库。这通常通过使用Python自带的工具`setup....

    C++扩展Python源码

    上述代码中,`PyArg_ParseTuple`用于解析Python对象到C类型,`PyLong_FromLong`则将C的整数转换为Python的长整型对象。 接下来,需要在C++中注册这个函数到Python,这通常通过`PyModuleDef`结构体和`PyModule_...

    PYTHON.转换到C结构或从C结构转换回来.pdf

    Python的`struct`模块是处理二进制数据的重要工具,它允许我们将Python数据类型转换为C语言结构体的字节序列,反之亦然。这对于与非Python程序交互,例如读写由C程序生成的二进制文件或在网络通信中传递数据非常有用...

    Python2.7学习文档

    - 用于在Python中处理C结构体数据。 - **hashlib**: - 提供了多种加密算法,如MD5、SHA1等。 - **itertools**: - 包含了大量的迭代器工具函数。 - **XML**: - 处理XML文档的标准库。 - **HTMLParser**: - 解析...

Global site tag (gtag.js) - Google Analytics