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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM