• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
python tcp 经典

 

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 复位后重新链接")

  

 

posted on 2021-08-27 16:48  MKT-porter  阅读(48)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3