python TCP通信,主从服务设计(通过json进行数据通信)

服务器端:

'''
                       _oo0oo_
                      o8888888o
                      88" . "88
                      (| -_- |)
                      0\  =  /0
                    ___/`---'\___
                  .' \\|     |// '.
                 / \\|||  :  |||// \
                / _||||| -:- |||||- \
               |   | \\\  - /// |   |
               | \_|  ''\---/''  |_/ |
               \  .-\__  '-'  ___/-. /
             ___'. .'  /--.--\  `. .'___
          ."" '<  `.___\_<|>_/___.' >' "".
         | | :  `- \`.;`\ _ /`;.`/ - ` : | |
         \  \ `_.   \_ __\ /__ _/   .-` /  /
     =====`-.____`.___ \_____/___.-`___.-'=====
                       `=---='


     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

           佛祖保佑       永不宕机     永无BUG

       佛曰:  
               写字楼里写字间,写字间里程序员;  
               程序人员写程序,又拿程序换酒钱。  
               酒醒只在网上坐,酒醉还来网下眠;  
               酒醉酒醒日复日,网上网下年复年。  
               但愿老死电脑间,不愿鞠躬老板前;  
               奔驰宝马贵者趣,公交自行程序员。  
               别人笑我忒疯癫,我笑自己命太贱;  
               不见满街漂亮妹,哪个归得程序员?

Description: 学习使用
Version: 1.0
Author: 赵守风
Email: 1583769112@qq.com
Date: 2021-08-04 10:34:23
LastEditors: zsf
FilePath: \http_demo\server_json.py
LastEditTime: 2021-08-04 14:25:33
'''

# python 3
# 服务端


import numpy as np
import socket
import threading
import json
import logging

TCP_PORT = 12005


def tcplink(sock,addr):
    print('Accept new connection from %s:%s...' % addr)
    sock.send( ('connect success!').encode() )
    # 客户端返回信息进行确认开始工作
    data=sock.recv(1024*10).decode()
    data_json = json.loads( data )
    print(data_json["start"])
    if data_json["start_flag"] == 1:
       while True:
            # 这里开始使用传数据
            data = {
                    "publicThreshold":{
                                      
                                      },
                     "wh_rate_thre":1,
                     "areas":[ {},{},{}
                             ],
                     "data":{"deviceId":1, "picPath":""}
            }
       
            
            str_json = json.dumps(data)
            sock.send( str_json.encode())
            

            print("---------------发送完成,等待数据返回---------------------")    
            # 等待接收信息
            data=sock.recv(1024*10).decode()
            data_json = json.loads( data )
            print("success:{}, errMsg:{},resData:{}".format(data_json["success"],data_json["errMsg"],data_json["resData"]))
            print("---------------接收数据完成,继续发送数据---------------------")  
    #sock.close()
    #print('Connection from %s:%s closed.'%addr)
    
def one_servicer():
    #Create The Socket
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    #Listen The Port
    s.bind(('192.168.1.97',TCP_PORT))
    s.listen(5)
    print('Waiting for connection...')
    # 一旦监听到立即进入连接
    while True:
        # 开始一个新连接
        sock,addr=s.accept()
        
        # 创建一个线程来处理连接
        t=threading.Thread(target=tcplink(sock,addr))


if __name__ == "__main__":
        one_servicer()

客户端:

'''
                       _oo0oo_
                      o8888888o
                      88" . "88
                      (| -_- |)
                      0\  =  /0
                    ___/`---'\___
                  .' \\|     |// '.
                 / \\|||  :  |||// \
                / _||||| -:- |||||- \
               |   | \\\  - /// |   |
               | \_|  ''\---/''  |_/ |
               \  .-\__  '-'  ___/-. /
             ___'. .'  /--.--\  `. .'___
          ."" '<  `.___\_<|>_/___.' >' "".
         | | :  `- \`.;`\ _ /`;.`/ - ` : | |
         \  \ `_.   \_ __\ /__ _/   .-` /  /
     =====`-.____`.___ \_____/___.-`___.-'=====
                       `=---='


     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

           佛祖保佑       永不宕机     永无BUG

       佛曰:  
               写字楼里写字间,写字间里程序员;  
               程序人员写程序,又拿程序换酒钱。  
               酒醒只在网上坐,酒醉还来网下眠;  
               酒醉酒醒日复日,网上网下年复年。  
               但愿老死电脑间,不愿鞠躬老板前;  
               奔驰宝马贵者趣,公交自行程序员。  
               别人笑我忒疯癫,我笑自己命太贱;  
               不见满街漂亮妹,哪个归得程序员?

Description: 学习使用
Version: 1.0
Author: 赵守风
Email: 1583769112@qq.com
Date: 2021-08-04 10:33:32
LastEditors: zsf
FilePath: \http_demo\client_json.py
LastEditTime: 2021-08-04 14:37:47
'''

# python 3
#客户端

import numpy as np
import socket
import json
import time
TCP_PORT = 12005



class tcp_client():
    def __init__(self, tcp_port):
        self.s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

        self.s.connect(('192.168.1.97',tcp_port))

        print( self.s.recv(1024).decode())
        str1 = '请开始初始化,'
        data = {'start':str1, 'start_flag': 1}
        str_json = json.dumps(data)
        self.s.send( str_json.encode())
        print("请求已经发出,等待初始化信息结果.....")

    
    # 从应用层获取数据
    def get_data(self):
        print("-------等待服务器端数据........")
        str_recv = self.s.recv(1024*10).decode()       
        data_json = json.loads( str_recv )
        # 打印结果
        for i in data_json:
            print("{}:{}".format(i, data_json[i]))
        return data_json
        # data ={'end':"初始化完成,数据正确", "end_flag": 1}
        # str_json = json.dumps(data)
        # self.s.send(str_json.encode())
        
        
    # 返回结果
    def return_result(self,state, errMsg, deviceId, state1, picPath,resData):
        data ={
                'success':state,
                'errMsg' : errMsg,
                'resData':{"deviceId":deviceId, "state":state1, "picPath":picPath,"resData":resData}
              }
        str_json = json.dumps(data)
        self.s.send(str_json.encode())
       


    #发送关闭客户端命令
    def close_tcp(self):
        print(" close tcp ... ")
        data = { 'command' : 'close' } 

        str_json = json.dumps(data)
        self.s.send( str_json.encode() )
        self.s.close()    


client = tcp_client( tcp_port = TCP_PORT )

# 测试步骤

# client.step()

while(True):
    data_json = client.get_data()
    # 这里对数据进行解析
    # 解析完成后对其进行处理
    time.sleep(0.5)
    #处理完成后返回状态结果
    print("-------返回计算数据-----------------")
    resData={"deviceId":1, "state":1, "picPath":"mock","proofPics":["1.jpg","2.jpg","3.jpg"]}
    client.return_result("1", "sucess", 1, 1,"",resData)

client.close_tcp()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值