zoukankan      html  css  js  c++  java
  • 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()
    

      

  • 相关阅读:
    怪怪设计论闲谈篇:职责与解耦的矛盾
    知识传播与社区讨论 : 兜售狗皮膏药的"软件先知"
    反弹和补遗:再论Bjarne Stroustrup的"基于对象"的含义
    回帖整理: 领域建模/表模块,Java/.NET 社区风格
    贫血或职责的讨论
    近期可能会研究和讨论的个人动向
    CLR寄宿(上) MSCOREE.DLL
    代码组(2) 成员条件
    说说emit(中)ILGenerator
    CLR寄宿(下) 托管宿主
  • 原文地址:https://www.cnblogs.com/ferraborghini/p/4970364.html
Copyright © 2011-2022 走看看