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

来源:互联网 发布:网络充330元种苹果树 编辑:程序博客网 时间:2024/06/06 01:38
struct.pack也就是将数据按照二进制的格式进行传输


#!/usr/bin/env python
#coding:utf-8
__author__ = 'ferraborghini'
from socket import *
import struct
#将16进制数据当做字节流传递
def dataSwitch(data):
    str1= ''
    str2= ''
    whiledata:
        str1= data[0:2]
        s= int(str1,16)
        str2+=struct.pack('B',s)
        data= data[2:]
    returnstr2
if __name__ =="__main__":
    HOST= 'localhost'
    PORT= 21567
    BUFSIZE= 1024
    ADDR= (HOST,PORT)
    tcpCliSock= socket(AF_INET,SOCK_STREAM)
    tcpCliSock.connect(ADDR)
    whileTrue:
        data= raw_input('>')
        ifnot data:
            break
        tcpCliSock.send(dataSwitch(data))
        data= tcpCliSock.recv(BUFSIZE)
        ifnot data:
            break
        printdata
    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个连接同时进入
    whileTrue:
        print'waiting for connection...'
        tcpCliSock,addr= tcpSerSocket.accept()
        print'...connected from:',addr
 
        whileTrue:
            data= tcpCliSock.recv(BUFSIZE)
            printdata.encode('hex')
            ifnot data:
                break
            tcpCliSock.send('[%s] %s'%(ctime(),data))
            # tcpCliSock.close()        #如果接收完,就断开的话,下次再发送就会报错,书本上有问题
    tcpSerSocket.close()
原创粉丝点击