python创建TCPserver与多个client通信

工作中需要写一个产测的软件去测试dut,这个dut启动之后,在wan口在DHCP分配一个固定的ip之后就会连接上指定的tcpserver,跟tcpserver只需通信,需要最大做到和16个dut持续的通信。

思路:
首先每一个dut连接上tcpserver之后,会获取到一个连接的对象,和client的ip,按照ip:连接的对象的键值对存到一个字典中,tcpserve 需要跟那个dut通信时候,就用ip到字典取找到该dut的连接的对象,思路确定,开干~上代码

1.首先写一个不阻塞的tcpserver的连接,调用startTcpThreading,会开启一个线程,开启一个tcpserver,最大监听16个,然后while True等待client的接入:

def startTCPSer(ser_addr=('', 888), thread_msg=True):
    tcpServer = socket(AF_INET, SOCK_STREAM)
    tcpServer.bind(ser_addr)
    tcpServer.listen(16)
    while True:
    #  等待client的接入
        tcpCliSock, addr = tcpServer.accept()
    #  接入成功,把对应的client的ip和连接对象存入字典
        tcp_dict[addr[0]] = tcpCliSock

def startTcpThreading(ser_addr=('', 888), thread_msg=True):
    t = threading.Thread(target=startTCPSer, args=(ser_addr, thread_msg))
    t.setDaemon(True)
    t.start()
2.写一个发送信息的方法
import time
from socket import *
import threading
import binascii

tcp_dict = {}


def send_to_dut(ip, command):
#判断clinet是否跟server建立连接
    if ip in tcp_dict:
        command_hex = bytes.fromhex(command)
        print(command_hex)
        #根据ip获取连接对象并发送命令
        tcp_dict[ip].send(command_hex)
        time.sleep(1)
        #接受消息
        data = tcp_dict[ip].recv(1024)
        result = binascii.b2a_hex(data)
        return result
    else:
        return "dut未跟mes建立tcp连接"

ok,干完了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值