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语言进行网络通信时,由于C语言常用`struct`来组织数据,故在Python端需要能够解析和重构这些`struct`数据。”这里的关键在于如何利用Python内置的`struct`模块来...
`andrew`和`ply`这两个文件名没有提供足够的信息来确定它们的具体内容,但它们可能包含了使用`struct_helper`的示例代码或相关的编译器/解析器工具。 在Python中,与C结构体交互的一个常见场景是在读写二进制文件,...
Python使用struct处理二进制的实例详解 有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最...
本主题聚焦于如何使用Python语言将Excel数据解析并转化为proto、IDL(Interface Definition Language)或struct格式。这三种格式各有其特点和用途,通常在分布式系统、网络通信以及数据序列化中扮演重要角色。 1. *...
在实际编程中,我们经常需要将DBC文件中的信息转化为C语言的结构体,以便于在程序中直接使用。这个过程被称为DBC文件解析。 "vector DBC文件转换为C结构体"是一个关键任务,因为它能帮助开发者高效地处理CAN消息。...
本文将重点介绍标题提到的“Python-一个易懂的类C结构解析Python库”,以及如何使用这个库来处理和解析类C结构。 该库的设计目标是提供一个简单易用的接口,让Python程序员能够方便地操作类似C语言的结构体。在...
这时,Python的`struct`模块提供了一种有效的方法来处理这些数据,尤其是与C语言中的结构体类似的数据。`struct`模块包含了三个关键函数:`pack()`、`unpack()`和`calcsize()`。 1. `pack(fmt, v1, v2, ...)`: 这个...
在Nim编程语言中,`struct.nim`模块提供了一种类似于Python的结构化数据处理方式,使得开发者能够方便地处理二进制数据流。这个模块对于那些需要处理底层数据结构,例如网络协议解析、文件格式读写或者系统编程的...
在C语言中,我们有结构体(struct),而在Python中,我们可以使用`struct`模块来处理类似的数据结构。虽然Python本身没有内建的结构体类型,但通过`pack()`和`unpack()`,我们可以模拟C语言的结构体操作。例如,可以...
它提供了将Python数据类型转换为字节流(通常用于网络传输或文件存储),以及将字节流解析回Python数据类型的功能。 #### 主要功能 - **数据转换**:按照指定格式将Python数据转换为字符串(字节流)。 - **数据...
### 深入源码解析Python中的对象与类型 #### 引言 Python作为一种动态类型的语言,其对象和类型的概念是其核心基础之一。本文将深入探讨Python内部如何实现对象和类型,特别是对象的引用计数机制以及类型的定义。...
在编程领域,结构体数组是一种非常重要的数据结构,它结合了结构体(Struct)和数组的概念,使得我们能够高效地存储和操作具有多种数据类型的集合。在这个“结构体数组详细介绍”的压缩包中,很显然,我们将深入探讨...
这个压缩包“struct.zip”可能包含了一系列的代码示例,用于教授如何在不同语言中使用结构体,以及如何处理结构化数据。学习和理解这些概念对于提升编程技能,尤其是系统级编程和底层开发能力至关重要。
6. JSON转换:Struct2 支持与JSON格式的互转,`to_json()` 可将数据结构转换为JSON字符串,`from_json(json_str)` 则可以将JSON字符串解析为Struct2对象。 三、Struct2进阶用法 1. 自定义类型:你可以定义自己的...
Python 包“CppHeaderParser” 目的:解析C++头文件,生成表示类的数据结构添加一名作者许可证: BSD 需要外部模块: PLY 快速开始:: #include <vector>#include <string>#define DEF_1 1#define OS_NAME "Linux...
在这个例子中,我们定义了一个名为`add`的函数,它使用Python的C API来解析输入参数并返回结果。 ##### 3.2 编译C代码 为了使用这个扩展模块,需要先将其编译成一个共享库。这通常通过使用Python自带的工具`setup....
上述代码中,`PyArg_ParseTuple`用于解析Python对象到C类型,`PyLong_FromLong`则将C的整数转换为Python的长整型对象。 接下来,需要在C++中注册这个函数到Python,这通常通过`PyModuleDef`结构体和`PyModule_...
Python的`struct`模块是处理二进制数据的重要工具,它允许我们将Python数据类型转换为C语言结构体的字节序列,反之亦然。这对于与非Python程序交互,例如读写由C程序生成的二进制文件或在网络通信中传递数据非常有用...
- 用于在Python中处理C结构体数据。 - **hashlib**: - 提供了多种加密算法,如MD5、SHA1等。 - **itertools**: - 包含了大量的迭代器工具函数。 - **XML**: - 处理XML文档的标准库。 - **HTMLParser**: - 解析...