參考: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()
