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