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