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()
    

      

  • 相关阅读:
    操作系统进程
    Lowest Common Ancestor of a Binary Search Tree
    Java并发编程实践之对象的组合
    字典序排序-求全排列(元素有重复)
    计算机网络基础知识
    多线程的基础知识
    多线程编程题
    Flask安装
    appium使用实例
    调用Excel或Oracle数据,数据加载,selenium等使用实例
  • 原文地址:https://www.cnblogs.com/ferraborghini/p/4970364.html
Copyright © 2011-2022 走看看