1.server_tcp.py

import logging
from socketserver import BaseRequestHandler, TCPServer, UDPServer
from threading import Thread

logging.basicConfig(
    level=logging.INFO,  # 定义输出到文件的log级别,大于此级别的都被输出
    format='%(asctime)s  %(filename)s  %(levelname)s : %(message)s',  # 定义输出log的格式
    datefmt='%Y-%m-%d %H:%M:%S',  # 时间
    filename="./server_tcp.log",
    filemode='a')  # 写入模式“w”或“a”
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# 设置格式
formatter = logging.Formatter('%(asctime)s  %(filename)s  %(levelname)s : %(message)s')
# 告诉handler使用这个格式
console.setFormatter(formatter)
# 为root logger添加handler
logging.getLogger('').addHandler(console)


class EchoHandler(BaseRequestHandler):
    def handle(self):
        while True:
            logging.info('Got connection from:{}'.format(self.client_address))
            msg = self.request.recv(8192).decode("utf-8").strip()
            if not msg:
                break
            else:
                # print("msg:{}".format(msg))
                self.request.send(msg.encode("utf-8"))


if __name__ == '__main__':
    # 服务端的ip地址
    server_ip = '0.0.0.0'
    # 服务端socket绑定的端口号
    server_port = 5554
    NWORKERS = 100

    serv = TCPServer((server_ip, server_port), EchoHandler, bind_and_activate=True)  # 绑定socket服务端所在ip和端口号  TCP
    for n in range(NWORKERS):
        t = Thread(target=serv.serve_forever)
        t.daemon = True
        t.start()
        serv.serve_forever()

2.client_tcp.py

import logging
import time
from socket import socket, AF_INET, SOCK_STREAM, SOCK_DGRAM

logging.basicConfig(
    level=logging.INFO,  # 定义输出到文件的log级别,大于此级别的都被输出
    format='%(asctime)s  %(filename)s  %(levelname)s : %(message)s',  # 定义输出log的格式
    datefmt='%Y-%m-%d %H:%M:%S',  # 时间
    filename="client_tcp.log",
    filemode='a')  # 写入模式“w”或“a”
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# 设置格式
formatter = logging.Formatter('%(asctime)s  %(filename)s  %(levelname)s : %(message)s')
# 告诉handler使用这个格式
console.setFormatter(formatter)
# 为root logger添加handler
logging.getLogger('').addHandler(console)

# 服务端的ip地址
server_ip = "10.8.67.236"
# server_ip = "192.168.104.150"
# server_ip = "45.199.148.36"
# server_ip = "192.168.104.150"
# 服务端socket绑定的端口号
server_port = 5554
# 请求次数
count = 10
# 请求暂停时间
time_sleep = 1
# 字节B
byte_count = 100

if __name__ == '__main__':
    start_time = time.time()
    for i in range(count):
        str_msg = "a" * byte_count
        if str_msg != "":
            client = socket(AF_INET, SOCK_STREAM)
            client.connect((server_ip, server_port))
            for j in range(10):
                bytes_msg = bytes(str_msg, encoding="utf-8")
                client.send(bytes_msg)
                data = client.recv(8192).decode("utf-8")
                logging.info("-------{}:{}".format(j, data))
                time.sleep(0.1)
            # time.sleep(time_sleep / 1000)
            client.close()
    logging.info("*" * 100)
    logging.info("总耗时时长:{}".format(str(time.time() - start_time)))

3.server_udp.py

import logging
from socketserver import BaseRequestHandler, TCPServer, UDPServer
from threading import Thread

logging.basicConfig(
    level=logging.INFO,  # 定义输出到文件的log级别,大于此级别的都被输出
    format='%(asctime)s  %(filename)s  %(levelname)s : %(message)s',  # 定义输出log的格式
    datefmt='%Y-%m-%d %H:%M:%S',  # 时间
    filename="./server.log",
    filemode='a')  # 写入模式“w”或“a”
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# 设置格式
formatter = logging.Formatter('%(asctime)s  %(filename)s  %(levelname)s : %(message)s')
# 告诉handler使用这个格式
console.setFormatter(formatter)
# 为root logger添加handler
logging.getLogger('').addHandler(console)


class EchoHandler(BaseRequestHandler):
    def handle(self):
        logging.info('Got connection from:{}'.format(self.client_address))
        data = self.request[0].strip()
        socket = self.request[1]
        socket.sendto(data, self.client_address)


if __name__ == '__main__':
    # 服务端的ip地址
    server_ip = '192.168.61.205'
    # 服务端socket绑定的端口号
    server_port = 20000
    NWORKERS = 100
    # serv = TCPServer((server_ip, server_port), EchoHandler)  # 绑定socket服务端所在ip和端口号  TCP
    serv = UDPServer((server_ip, server_port), EchoHandler)  # 绑定socket服务端所在ip和端口号  UDP
    for n in range(NWORKERS):
        t = Thread(target=serv.serve_forever)
        t.daemon = True
        t.start()
        serv.serve_forever()

4.client_udp.py

import logging
import time
from socket import socket, AF_INET, SOCK_STREAM, SOCK_DGRAM

logging.basicConfig(
    level=logging.INFO,  # 定义输出到文件的log级别,大于此级别的都被输出
    format='%(asctime)s  %(filename)s  %(levelname)s : %(message)s',  # 定义输出log的格式
    datefmt='%Y-%m-%d %H:%M:%S',  # 时间
    filename="client_udp.log",
    filemode='a')  # 写入模式“w”或“a”
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# 设置格式
formatter = logging.Formatter('%(asctime)s  %(filename)s  %(levelname)s : %(message)s')
# 告诉handler使用这个格式
console.setFormatter(formatter)
# 为root logger添加handler
logging.getLogger('').addHandler(console)

# 服务端的ip地址
# server_ip = "10.8.67.236"
server_ip = "192.168.104.150"
# server_ip = "45.199.148.36"
# 服务端socket绑定的端口号
server_port = 6665
# 请求次数
count = 1
# 请求暂停时间
time_sleep = 1
# 字节B
byte_count = 100

if __name__ == '__main__':
    start_time = time.time()
    for i in range(count):
        # str_msg = input("请输入要发送信息:")
        str_msg = "a" * byte_count
        if str_msg != "":
            bytes_msg = bytes(str_msg, encoding="utf-8")
            # client = socket(AF_INET, SOCK_STREAM)
            client = socket(AF_INET, SOCK_DGRAM)
            client.connect((server_ip, server_port))
            for i in range(100):
                client.send(bytes_msg)
                data = client.recv(8192).decode("utf-8")
                logging.info("-------{}:{}".format(i, data))
                time.sleep(1)
            time.sleep(time_sleep / 1000)
            client.close()
    logging.info("*" * 100)
    logging.info("总耗时时长:{}".format(str(time.time() - start_time)))