二分队-写端口代码3

服务器1

import socket
import time
from random import randint


def start_server(port=12346):
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_socket.bind(('0.0.0.0', port))
    print(f"Server listening on port {port}...")

    expected_packets = 1000  # 假设我们期待接收到1000个包
    received_packets = set()  # 用来记录接收到的唯一包序列号
    incorrect_packets = 0  # 记录接收到的错误数据包

    start_time = time.time()

    while len(received_packets) < expected_packets:
        data, addr = server_socket.recvfrom(1024)
        seq_num = int(data.decode())

        # 模拟数据校验,这里简化处理,假设数据正确性依赖于序列号是否连续
        if seq_num != len(received_packets) + 1:
            incorrect_packets += 1

        received_packets.add(seq_num)

    end_time = time.time()
    elapsed_time = end_time - start_time

    # 计算统计指标
    packet_loss_rate = (expected_packets - len(received_packets)) / expected_packets * 100
    accuracy_rate = 100 - (incorrect_packets / len(received_packets) * 100) if received_packets else 0

    print(f"Total Packets Expected: {expected_packets}")
    print(f"Packets Received: {len(received_packets)}")
    print(f"Packet Loss Rate: {packet_loss_rate:.2f}%")
    print(f"Data Accuracy Rate: {accuracy_rate:.2f}%")
    print(f"Time Elapsed: {elapsed_time:.2f} seconds")

    server_socket.close()


if __name__ == "__main__":
    start_server()
 

客户端1

import socket
import time
from random import random


def start_client(server_ip='127.0.0.1', port=12346):
    try:
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        expected_packets = 1000
        for i in range(expected_packets):
            data = str(i + 1).encode()  # Simple sequence number as data content
            client_socket.sendto(data, (server_ip, port))
            # Simulate random delay (in milliseconds)
            time.sleep(random() * 0.01)
    except Exception as e:
        print(f"An error occurred: {e}")
    finally:
        client_socket.close()


if __name__ == "__main__":
    start_client()
 

服务器3

import socket
import struct
import hashlib
import os
BUFFER_SIZE = 1024

def receive_file(sock):
    file_size = struct.unpack('!Q', sock.recv(struct.calcsize('!Q')))[0]
    received_size = 0
    md5_hash = hashlib.md5()
    with open('received_file.txt', 'wb') as f:
        while received_size < file_size:
            chunk = sock.recv(BUFFER_SIZE)
            if not chunk:
                break

            f.write(chunk)
            md5_hash.update(chunk)
            received_size += len(chunk)
    return received_size == file_size, md5_hash.hexdigest()


def main(server_port):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
        sock.bind(('0.0.0.0', server_port))
        sock.listen()
        print(f"Server listening on port {server_port}...")
        conn, addr = sock.accept()
        print(f"Connection from {addr}")

        success, file_md5 = receive_file(conn)
        if success:
            print("File received successfully.")
            print(f"MD5 Hash: {file_md5}")
        else:
            print("File reception failed.")

        conn.close()


if __name__ == "__main__":
    SERVER_PORT = 12345
    main(SERVER_PORT)
 

客户端3

import socket
import os
import struct
import time
from threading import Thread

BUFFER_SIZE = 128  # 缓冲区大小
FIXED_BANDWIDTH = 1024 * 1024  # 模拟的固定带宽,单位:字节/秒


def send_file(sock, file_path):
    with open(file_path, 'rb') as f:
        file_size = os.path.getsize(file_path)
        sock.sendall(struct.pack('!Q', file_size))  # 先发送文件大小
        sent_size = 0
        start_time = time.time()

        while sent_size < file_size:
            chunk = f.read(BUFFER_SIZE)
            if not chunk:
                break

            sock.sendall(chunk)
            sent_size += len(chunk)

            # 控制发送速率
            sleep_time = max(0, (sent_size / FIXED_BANDWIDTH) - (time.time() - start_time))
            if sleep_time > 0:
                time.sleep(sleep_time)
                start_time += sleep_time


def main(server_ip, server_port, file_path):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
        sock.connect((server_ip, server_port))
        print("Sending file...")
        send_file(sock, file_path)
        print("File sent.")


if __name__ == "__main__":
    SERVER_IP = '127.0.0.1'  # 服务器IP
    SERVER_PORT = 12345  # 服务器端口
    FILE_PATH = 'icudtl.dat'  # 要发送的文件路径
    main(SERVER_IP, SERVER_PORT, FILE_PATH)
 

QGDW 12156-2021 应急救援基干分培训及量化考评规范是针对应急救援基干分开展培训和进行考评所制定的规范。该规范的主要目的是为了提高应急救援工作的效率和水平,确保在灾害和紧急情况下能够快速、有效地展开救援行动。 培训是保证应急救援基干分实力和能力的重要手段,因此在规范中明确了培训的内容和要求。首先,规范要求对基本救援知识、应急处置程序和安全防护等方面进行系统、全面的培训,确保每位成员具备必备的救援技能。其次,规范要求培训中要加强实操训练,通过模拟演练和实地训练提升应急处置能力。同时,规范还明确了培训的周期和频率,要求定期组织培训,加强成员的培训和训练更新。 考评是评估应急救援基干分能力和运行状况的重要手段,因此规范中也明确了考评的方式和要求。规范要求采取定期考核和实地考察相结合的方式,对各个岗位的成员进行综合评估,包括技能水平、应急响应能力、工作质量等方面。考评结果将作为成员晋升、奖惩和评优评先的依据,激励成员积极参与培训和提高自身能力。 总而言之,QGDW 12156-2021 应急救援基干分培训及量化考评规范的出台,将有力推动应急救援工作的发展,提高基干分的救援能力和应对能力,进一步增强社会的应急防范和安全保障能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值