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