📜  门|门 CS 1997 |第 34 题(1)

📅  最后修改于: 2023-12-03 14:58:34.948000             🧑  作者: Mango

题目概述

本题为「门|门 CS 1997」比赛中的第 34 题。本题要求实现一个简单的门禁系统,能够对外界的开门请求进行处理,并向外界返回开门的结果。本题的开门协议采用 UDP 协议进行通信。详细的题目描述请参照 UVA12195

程序实现

本题需要实现一个 UDP 协议的通信接口,用于监听来自外界的开门请求,并向外界返回开门的结果。在接收到请求后,需要根据用户输入的密码和门禁系统中的密码进行比较,并根据比较结果返回开门结果。

import socket

HOST = ''    
PORT = 8080  

def main():
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
        s.bind((HOST, PORT))
        while True:
            data, addr = s.recvfrom(1024)
            print(f'Received from {addr}: {data}')
            
            # 比较密码,返回开门结果
            if data == b'0000':
                result = 'Success'
            else:
                result = 'Failure'
                
            s.sendto(result.encode(), addr)

if __name__ == '__main__':
    main()

使用方法

  1. 先将上述代码保存为 door.py 文件,并在终端中进入该文件所在的目录。

  2. 在终端中输入以下命令以启动程序:

    python door.py
    
  3. 此时程序已经处于监听状态。可以使用以下命令向程序发送开门请求:

    echo "0000" | nc -4u -w1 localhost 8080
    

    其中,0000 为门禁系统中的密码,localhost 为本地地址,8080 为程序监听的端口。执行以上命令后,程序会返回开门结果。

  4. 如果需要停止程序,可以按 Ctrl + C 组合键退出。