基于Python的TCP服务器测试连接工具---不定长发送数据

TCP服务器多线程连接—不定长发送数据

一、思路

开一个TCP服务器,每当有新的TCP客户端连接,就会产生新的线程,新的线程对TCP客户端消息进行处理。每个线程发送数据随机都是产生的乱码,发出去并且计算发送的长度,然后阻塞等待新的数据,直到有新的数据产生。

import socket
import threading
import time
import os
import random


def msg(sock, ip_port):

    txlength = 0  # 发送数据长度
    rxlength = 0  # 接收数据长度

    # 3-返回发送数据
    while True:
        try:
            time.sleep(1)  # 线程睡眠1秒
            data = os.urandom(48 * random.randint(1, 10))  # 随机产生数据
            txlength = txlength + len(data)
            sock.send(data)  # 显示发送数据

            print('%s:' % str(ip_port))
            print(data)  # 显示数据

            data = sock.recv(1024)  # 接收数据
            print(data)  # 显示接收数据

            rxlength = rxlength + len(data)
            print('发送:', str(txlength), ' ,接收: ', str(rxlength))

            # 判断连接是否断开
            if data is b'':
                sock.close()
                break
        except TimeoutError as n:
            sock.close()


# TCP服务器对象
class Tcp_Server(object):
    # 初始化服务器
    def __init__(self, ip, port):

        self.target_ip = ip
        self.target_port = port

        # 1-绑定IP地址和端口号
        self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.server.bind((self.target_ip, self.target_port))

        # 2-监听客户端
        self.server.listen(128)
        while True:
            sock, ip_port = self.server.accept()  # 接收客户端连接

            # 3-只要有新的连接进来就启动线程
            if sock is not None:
                tid = threading.Thread(target=msg, args=(sock, ip_port,))
                tid.start()  # 启动线程
                print('新用户连接:%s' % str(ip_port))

# 主函数
def main():
    Tcp_Server('192.168.7.37', 9001)  # 开启建立服务器端


if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值