python socket以16进制的数据进行传递与解析

参考:http://m.blog.csdn.net/blog/JasonQue/8256424

具体的struct模块的解释可以参照上面的链接。

struct.pack也就是将数据按照二进制的格式进行传输
#!/usr/bin/env python
#coding:utf-8
__author__ = 'ferraborghini'
from socket import *
import struct
#将16进制数据当做字节流传递
def dataSwitch(data):
    str1 = ''
    str2 = ''
    while data:
        str1 = data[0:2]
        s = int(str1,16)
        str2 += struct.pack('B',s)
        data = data[2:]
    return str2
if __name__ == "__main__":
    HOST = 'localhost'
    PORT = 21567
    BUFSIZE = 1024
    ADDR = (HOST,PORT)
    tcpCliSock = socket(AF_INET,SOCK_STREAM)
    tcpCliSock.connect(ADDR)
    while True:
        data = raw_input('>')
        if not data:
            break
        tcpCliSock.send(dataSwitch(data))
        data = tcpCliSock.recv(BUFSIZE)
        if not data:
            break
        print data
    tcpCliSock.close()

  

 

解析报文,这时候读入的其实相当于二进制流,我们要做的就将二进制流转化为16进制就行

#!/usr/bin/env python
#coding:utf-8
from socket import *
from time import ctime
if __name__ == "__main__":
    HOST = ''                       #此处为空代表可以绑定所有有效地址
    PORT = 21567
    BUFSIZE = 1024
    ADDR = (HOST,PORT)
    tcpSerSocket = socket(AF_INET,SOCK_STREAM)
    tcpSerSocket.bind(ADDR)
    tcpSerSocket.listen(5)          #最多可以有5个连接同时进入
    while True:
        print 'waiting for connection...'
        tcpCliSock,addr = tcpSerSocket.accept()
        print '...connected from:',addr

        while True:
            data = tcpCliSock.recv(BUFSIZE)
            print data.encode('hex')
            if not data:
                break
            tcpCliSock.send('[%s] %s'%(ctime(),data))
            # tcpCliSock.close()        #如果接收完,就断开的话,下次再发送就会报错,书本上有问题
    tcpSerSocket.close()

  

转载于:https://www.cnblogs.com/ferraborghini/p/4970364.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值