tcp_send.py
# -*- coding: utf-8 -*- #activate py37_tfgpu1131_keras215_opencv341 import socket,threading def c_thread(s_client,addr): print(addr,'成功连接') #打印连接者地址信息 while True: data = s_client.recv(1024).decode('utf-8') #接收客户端数据 print('服务器收到',addr,'信息为',data) s_client.sendall(data.encode('utf-8')) print('发送成功') if data == 'over': s_client.close() print('该子进程已关闭') break #实例化 tcp_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #绑定端口 tcp_server.bind(('localhost',8000)) #监听 tcp_server.listen(10) print('服务器上线') while True: s_client,addr =tcp_server.accept() #会话阻塞 等待客户端连接 #创建子线程(执行与客户端的读写交互) sc_client = threading.Thread(target=c_thread,args=(s_client,addr)) #启动子线程 sc_client.start()
tcp_client.py
# -*- coding: utf-8 -*- #activate py37_tfgpu1131_keras215_opencv341 import socket #实例化客户端对象 tcp_clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #连接 tcp_clinet.connect(("localhost",8000)) while True: words =input("客户端说:").encode("utf-8") #说话并序列化 tcp_clinet.sendall(words) #发送数据 data =tcp_clinet.recv(1024).decode('utf-8') print("接受到的数据为:",data) if data == 'data': tcp_clinet.close() break
接收端
#!/usr/bin/python # -*- coding: UTF-8 -*- #activate py37_tfgpu1131_keras215_opencv341 import socket import json class Tcp_Light_YB: def __init__(self, tcp_ip, tcp_port): self.tcp_Name="Motor" self.tcp_ip = tcp_ip self.tcp_port = tcp_port #实例化客户端对象 self.tcp_clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #tcp_clinet.setblocking(False) # 设置为非阻塞模式 def ConectTcp(self): try: self.tcp_clinet.connect((self.tcp_ip,self.tcp_port)) print(self.tcp_Name,"设备连接接成功","Connected to %s on port %s" % (self.tcp_ip, self.tcp_port)) return True except socket.error as e: print(self.tcp_Name,"Connected to %s on port %s" % (self.tcp_ip, self.tcp_port)) print(self.tcp_Name,"连接失败: 1 检查单片机WIFI已经连接局域网 2检查IP和端口是否正确 3复位后重新连接") return False def SendMsgWait(self): words =input("客户端说:").encode("utf-8") try: #说话并序列化 self.tcp_clinet.sendall(words) #发送数据 except socket.error as e: print(self.tcp_Name,"IP",self.tcp_ip,"Port", self.tcp_port,"发送失败,请检查链接...") def SendMsg(self,Content): try: Content=Content.encode("utf-8") #说话并序列化 self.tcp_clinet.sendall(Content) #发送数据 except socket.error as e: print(self.tcp_Name,"IP",self.tcp_ip,"Port", self.tcp_port,"发送失败,请检查链接...") def Close(self): self.tcp_clinet.close() def TestConnect(self): self.tcp_clinet.sendall("heart;".encode("utf-8")) #发送数据 state=0 try: rec_data =self.tcp_clinet.recv(1024).decode('utf-8') print("==========接受到的原始数据为:",rec_data) if rec_data=="ok": print("连接正常") state=1 else: print("返回错误") state=0 except socket.error as e: print(self.tcp_Name,"客户端没有反应") state=0 return state def RecMsg(self): while True: #self.SendMsgWait() try: rec_data =self.tcp_clinet.recv(1024).decode('utf-8') print("==========接受到的原始数据为:",rec_data) json2python = json.loads(str(rec_data)) #print ("json数据:",json2python) print("传感器类型","SensorType",json2python["SensorType"]) SensorType=json2python["SensorType"] if SensorType=="LightDitance": print("激光测距传感器编号:","LightDistance1", "数据:",json2python["LightDistance1"]) print("激光测距传感器编号:","LightDistance2","数据:",json2python["LightDistance2"]) elif SensorType=="deformation1to8": print("应变力传感器编号:","DT1","数据:",json2python["DT1"]) print("应变力传感器编号:","DT2","数据:",json2python["DT2"]) print("应变力传感器编号:","DT3","数据:",json2python["DT3"]) print("应变力传感器编号:","DT4","数据:",json2python["DT4"]) print("应变力传感器编号:","DT5","数据:",json2python["DT5"]) print("应变力传感器编号:","DT6","数据:",json2python["DT6"]) print("应变力传感器编号:","DT7","数据:",json2python["DT7"]) print("应变力传感器编号:","DT8","数据:",json2python["DT8"]) Tcp_Light_YB.SendMsg("deformation;") #tcp_clinet.sendall("temperature;".encode("utf-8")) if rec_data == 'end': self.tcp_clinet.close() break except BlockingIOError: pass tcp_ip="192.168.137.106" tcp_port=6668 Tcp_Light_YB=Tcp_Light_YB(tcp_ip,tcp_port) Tcp_Light_YB.ConectTcp() state=Tcp_Light_YB.TestConnect() if state==1: #Tcp_Light_YB.SendMsgWait() #Tcp_Light_YB.SendMsg("light;") #Tcp_Light_YB.SendMsg("deformation;") Tcp_Light_YB.RecMsg() else: print("Tcp_Light_YB 连接失败: 1 检查单片机WIFI已经链接局域网且IP正确 2 复位后重新链接")