You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
6.8 KiB
134 lines
6.8 KiB
|
3 years ago
|
# tcp 客户端 模拟 发送 信息帧 数据帧 图片帧
|
||
|
|
|
||
|
|
import socket
|
||
|
|
import time
|
||
|
|
|
||
|
|
# IP = "39.96.0.224"
|
||
|
|
IP = "127.0.0.1"
|
||
|
|
PORT = 7887
|
||
|
|
ADDRESS = ( IP, PORT ) # 绑定地址
|
||
|
|
|
||
|
|
# 改数据
|
||
|
|
class DataContent:
|
||
|
|
# 11 13 55 AA 02 00 00 11 00 00 00 4F 00 01 07
|
||
|
|
info_frame = "11 13 55 AA 02 00 00 11 00 00 00 4F 00 01 07 1703140E313518565D1E51D55605CCE812068CDDC347D0239515000000000000000000000064000000000000000000000000000000000000000000F450F450F4500600000300000000000000000000"
|
||
|
|
|
||
|
|
sensor_frame =[
|
||
|
|
# 11 13 55 AA 02 00 10 11 00 00 00 DA 06 02 07
|
||
|
|
' 11 13 55 AA 02 00 10 11 00 00 00 DA 06 02 07 131123600020000000524844557691E700CB054C054A05A10001\
|
||
|
|
23A000300700000A07FD062A073707440750074D074C07530759075A07610765076A07720790079107A407C3070709BE0AAC0ABF080F080808270849089E0880094F0BB70F2A1901\
|
||
|
|
23A000300600005223CD28242B3830E235813BE9401B46675A3181C68D5C7916715D74C676617658742E71B26C9C674363DA5F1C5E0160F164DF66A262F85AD153764E4F4C014D01\
|
||
|
|
23A00030050000EA4D8C4D314DF44D3C4FC250E453BA5E4486B8C5BCECC4D29A96436BFA56734E4B4A55473446364A845140582A5A9C55A54D91465440303C1B3FDE5783718E7001\
|
||
|
|
23A00030040000DC565046C140F63D21392E32D12B5B28A226F3253525662366219E20DD1FB11E971DC51C2F1C901B921A6419C21882185818E418181B401DEC1C1D1A3917F71501\
|
||
|
|
23A00030030000EE153316F516CA176E18B218CA18B118701845186A1730155913E51314153015E1146C1420147D13C11208128C1128113011BF121614DB12F70F3B0EE50D320E01\
|
||
|
|
23A00030020000FD0D3C0D930C470C0D0CB80B710B1E0BCD0A920A560A1F0A000A140A460A3E0AD0097A096C095F092109B60870085F0834082B081C0808080B08DD07B907950701\
|
||
|
|
23A000300100007007620755074A0740074C074607460748074A07500758075D0757074F0743075F0756075F0758074F073F07240745076207770756073F072A070907E606D60601\
|
||
|
|
23A00030000000F3060F07250722072E07200703070B07EC06FF0619073E07590734071807190719070A07E106DD06F006EC061B072F073E073E07220725070B07F806C806DE0601\
|
||
|
|
23A000300700000A07FD062A073707440750074D074C07530759075A07610765076A07720790079107A407C3070709BE0AAC0ABF080F080808270849089E0880094F0BB70F2A1901\
|
||
|
|
23A000300600005223CD28242B3830E235813BE9401B46675A3181C68D5C7916715D74C676617658742E71B26C9C674363DA5F1C5E0160F164DF66A262F85AD153764E4F4C014D01\
|
||
|
|
23A00030050000EA4D8C4D314DF44D3C4FC250E453BA5E4486B8C5BCECC4D29A96436BFA56734E4B4A55473446364A845140582A5A9C55A54D91465440303C1B3FDE5783718E7001\
|
||
|
|
23A00030040000DC565046C140F63D21392E32D12B5B28A226F3253525662366219E20DD1FB11E971DC51C2F1C901B921A6419C21882185818E418181B401DEC1C1D1A3917F71501\
|
||
|
|
23A00030030000EE153316F516CA176E18B218CA18B118701845186A1730155913E51314153015E1146C1420147D13C11208128C1128113011BF121614DB12F70F3B0EE50D320E01\
|
||
|
|
23A00030020000FD0D3C0D930C470C0D0CB80B710B1E0BCD0A920A560A1F0A000A140A460A3E0AD0097A096C095F092109B60870085F0834082B081C0808080B08DD07B907950701\
|
||
|
|
23A000300100007007620755074A0740074C074607460748074A07500758075D0757074F0743075F0756075F0758074F073F07240745076207770756073F072A070907E606D60601\
|
||
|
|
23A00030000000F3060F07250722072E07200703070B07EC06FF0619073E07590734071807190719070A07E106DD06F006EC061B072F073E073E07220725070B07F806C806DE0601\
|
||
|
|
23A000300700000A07FD062A073707440750074D074C07530759075A07610765076A07720790079107A407C3070709BE0AAC0ABF080F080808270849089E0880094F0BB70F2A1901\
|
||
|
|
23A000300600005223CD28242B3830E235813BE9401B46675A3181C68D5C7916715D74C676617658742E71B26C9C674363DA5F1C5E0160F164DF66A262F85AD153764E4F4C014D01\
|
||
|
|
23A00030050000EA4D8C4D314DF44D3C4FC250E453BA5E4486B8C5BCECC4D29A96436BFA56734E4B4A55473446364A845140582A5A9C55A54D91465440303C1B3FDE5783718E7001\
|
||
|
|
23A00030040000DC565046C140F63D21392E32D12B5B28A226F3253525662366219E20DD1FB11E971DC51C2F1C901B921A6419C21882185818E418181B401DEC1C1D1A3917F71501\
|
||
|
|
23A00030030000EE153316F516CA176E18B218CA18B118701845186A1730155913E51314153015E1146C1420147D13C11208128C1128113011BF121614DB12F70F3B0EE50D320E01\
|
||
|
|
23A00030020000FD0D3C0D930C470C0D0CB80B710B1E0BCD0A920A560A1F0A000A140A460A3E0AD0097A096C095F092109B60870085F0834082B081C0808080B08DD07B907950701\
|
||
|
|
23A000300100007007620755074A0740074C074607460748074A07500758075D0757074F0743075F0756075F0758074F073F07240745076207770756073F072A070907E606D60601\
|
||
|
|
23A00030000000F3060F07250722072E07200703070B07EC06FF0619073E07590734071807190719070A07E106DD06F006EC061B072F073E073E07220725070B07F806C806DE0601',
|
||
|
|
]
|
||
|
|
|
||
|
|
end_frame = "11 13 55 AA 02 00 FF 11 00 00 00 00 00 00 00" #0xFF
|
||
|
|
|
||
|
|
class TcpHandheld(object):
|
||
|
|
def __init__(self ):
|
||
|
|
super(TcpHandheld, self).__init__()
|
||
|
|
self.flag = True
|
||
|
|
self.delay_time = 15
|
||
|
|
self.recv_times = 10
|
||
|
|
self.head = b''
|
||
|
|
self.socket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
|
||
|
|
self.socket.setblocking(True)
|
||
|
|
|
||
|
|
def connect(self,):
|
||
|
|
print(f"== connect to server : {ADDRESS}")
|
||
|
|
self.socket.connect( ADDRESS )
|
||
|
|
|
||
|
|
def disconnect(self,):
|
||
|
|
self.socket.close( )
|
||
|
|
|
||
|
|
def rcv(self,):
|
||
|
|
recv_data = self.socket.recv( 1024 )
|
||
|
|
if recv_data == self.head:
|
||
|
|
self.flag =True
|
||
|
|
time.sleep( 0.01 )
|
||
|
|
|
||
|
|
def send_rcv(self,buf):
|
||
|
|
self.socket.send( buf )
|
||
|
|
self.flag = False
|
||
|
|
self.head = buf[:15]
|
||
|
|
# 当前接收到数据就不阻塞了,后加数据不对继续阻塞
|
||
|
|
try:
|
||
|
|
data = self.socket.recv(1024)
|
||
|
|
if data != b'':
|
||
|
|
print("not empty")
|
||
|
|
print(data)
|
||
|
|
if data==self.head:
|
||
|
|
print(f"recv.... {data}" )
|
||
|
|
self.flag = True
|
||
|
|
self.head = b''
|
||
|
|
time.sleep( 0.1 )
|
||
|
|
except BlockingIOError as e:
|
||
|
|
print(f" 阻塞 中断 ....")
|
||
|
|
except KeyboardInterrupt as e:
|
||
|
|
print(f" == ctrl +c , exit")
|
||
|
|
|
||
|
|
|
||
|
|
def send_info(self,):
|
||
|
|
buf = bytes.fromhex (DataContent.info_frame)
|
||
|
|
self.flag = False
|
||
|
|
self.head = buf[:15]
|
||
|
|
print(f"head ....{self.head.hex()}")
|
||
|
|
self.send_rcv(buf)
|
||
|
|
|
||
|
|
|
||
|
|
def send_data(self,):
|
||
|
|
buf = b''
|
||
|
|
for i in range( len( DataContent.sensor_frame) ):
|
||
|
|
print( "sensorframe..." )
|
||
|
|
buf = bytes.fromhex ( DataContent.sensor_frame[i] )
|
||
|
|
self.flag = False
|
||
|
|
self.head = buf[:15]
|
||
|
|
print(f"head ....{self.head.hex()} ")
|
||
|
|
self.send_rcv(buf)
|
||
|
|
|
||
|
|
def send_end_frame(self,):
|
||
|
|
buf = bytes.fromhex (DataContent.end_frame)
|
||
|
|
self.flag = False
|
||
|
|
self.head = buf[:15]
|
||
|
|
print(f"head ....{self.head.hex()}")
|
||
|
|
self.send_rcv(buf)
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
# print( bytes.fromhex (DataContent.info_frame) )
|
||
|
|
th = TcpHandheld()
|
||
|
|
th.connect()
|
||
|
|
|
||
|
|
try :
|
||
|
|
while True:
|
||
|
|
th.send_info()
|
||
|
|
|
||
|
|
th.send_data()
|
||
|
|
|
||
|
|
time.sleep( 2)
|
||
|
|
except KeyboardInterrupt as e:
|
||
|
|
print(e)
|
||
|
|
|
||
|
|
th.disconnect( )
|
||
|
|
|
||
|
|
|