python网络编程SocketServer

来源:互联网 发布:kirinji 日本乐队 知乎 编辑:程序博客网 时间:2024/05/10 18:44

已经用C开发好了一个发送TCP数据包的网络程序,用于向另一个程序传送消费订单,现在需要用python开发一个测试数据,测试传送的数据是否正确。在网络通信里我们一般传送的数据格式是二进制,如“0x12345678”,这个在C语言里定义很简单,就是用结构体定义,而在python里,我们也可以使用struct,从而将二进制数据转换成我们需要的值格式。

以下为该程序的简单示例,该程序会监听8801端口,接收新的客户端连接及数据包,数据的前8个字节是两个int类型数据,unpack出cmd_id,以此来判断消息类型,并unpack出我们需要的各种消息数据。

#!/usr/bin/env pythonimport structfrom socket import *from time import ctimeHOST = ''PORT = 8801ADDR = (HOST, PORT)servSock = socket(AF_INET, SOCK_STREAM)servSock.bind(ADDR)servSock.listen(5)while True:    print "waiting for connection..."    cliSock, addr = servSock.accept()    print "...connected from:", addr    while True:        data = cliSock.recv(1024)        if not data:            break        msg_len, cmd_id = struct.unpack_from('!2i', data, 0)        print msg_len, cmd_id        if(cmd_id == 304):            roomno, sequence, type, name_ch, code, count, price, total = struct.unpack_from('!16sQ50s50s16sQ6s6s', data, 8)            print "order:", roomno, sequence, type.decode('gb2312'), name_ch.decode('gb2312'), code, count, price, total        bytes = struct.pack('!2i', 32769, 8)        cliSock.send(bytes)    cliSock.close()servSock.close()


0 0
原创粉丝点击