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 复位后重新链接")
浙公网安备 33010602011771号