使用UDP完成网络单词查询,利用dict数据库

news/2024/5/18 13:01:25 标签: 网络, udp, 数据库

【注】UDP的优缺点:

        1:传输效率高

        2:易出现数据丢失

        3:以数据报的形式传输

思路:

        step1:获取客户端请求

        step2:查询单词

        step3:响应客户端

Client.py

from socket import *

SERVICE_ADDR = ("127.0.0.1", 8888)

udp_socket = socket(AF_INET, SOCK_DGRAM)
while True:
    word = input(">>")
    if word == "##":
        break
    udp_socket.sendto(word.encode(), SERVICE_ADDR)
    data, addr = udp_socket.recvfrom(1024)
    print(f"{data.decode()}")
udp_socket.close()

Server.py

import pymysql
from socket import *


class Query:
    # 连接数据库
    def __init__(self):
        # 连接数据库
        self.count = 0
        self.kwargs = {
            "host": "localhost",
            "port": 3306,
            "user": "root",
            "password": "123456",
            "database": "dict",
            "charset": "utf8"
        }
        self.db = pymysql.connect(**self.kwargs)
        self.cur = self.db.cursor()
        # udp套接字对象
        self.udp_socket = socket(AF_INET, SOCK_DGRAM)
        self.udp_socket.bind(("0.0.0.0", 8888))

    def select_db(self, query_word):
        query_sql = "select mean from words where word = %s"
        self.cur.execute(query_sql, [query_word])
        mean = self.cur.fetchone()  # 返回的是元组
        if mean == None:  # 查不到
            return
        return mean[0]

    def run(self):
        while True:
            data, addr = self.udp_socket.recvfrom(1024)  # 获取请求
            self.count += 1
            print(f"请求{self.count},查询单词:{data.decode()},用户ip:{addr[0]}")
            mean = self.select_db(data.decode())
            if mean == None:
                self.udp_socket.sendto("无结果!".encode(), addr)
            else:
                self.udp_socket.sendto(mean.encode(), addr)


if __name__ == '__main__':
    query = Query()
    query.run()


http://www.niftyadmin.cn/n/5479404.html

相关文章

C语言每日一题(66)三数之和

题目链接 力扣15.三数之和 题目描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答…

(26)4.7 字符函数和字符串函数

#include<stdio.h> #include<string.h> #include<assert.h> //int my_strcmp(const char* str1, const char* str2) //{ // assert(str1 && str2);//指针有效性&#xff0c;不能为空指针 // while (*str1 *str2) // { // if (*str1…

linux启动流程(s3c2400)

概述 大致流程&#xff1a;内核&#xff08;kernel&#xff09;都是由bootloader程序引导启动的&#xff0c;所以我们应该先烧进去bootloader程序。然后可以通过保存的内核代码或者通过远程连接&#xff08;nfs/tftp&#xff09;的主机下载再运行&#xff0c;再挂载根文件系统。…

python-pytorch NLP中处理中文的步骤0.5.002

python-pytorch NLP中处理中文的步骤0.5.001 1. 导入包2. 准备停用词3. 把需要处理的文本切词4. 将切的词放入list中5. 获取vocab、vocab_size6. 获取word_to_idx、idx_to_word7. 告一段落8. 其他&#xff08;1800的停用词&#xff09; 1. 导入包 import jieba import torch i…

番茄 abogus rpc调用

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章…

【Java多线程】案例(1):设计模式

目录 一、什么是设计模式&#xff1f; 二、单例模式 1. 饿汉模式 2. 懒汉模式 懒汉模式-第一次改进 懒汉模式-第二次改进 懒汉模式-第三次改进 一、什么是设计模式&#xff1f; 设计模式是针对软件设计中常见问题的通用解决方案。它们提供了一种被广泛接受的方法来解决…

mineadmin 设置时区

由于不同环境下&#xff0c;会造成时区不一致问题 在/bin/hyperf.php 文件里&#xff0c;设置 date_default_timezone_set(Asia/Shanghai);

React 状态管理:高效处理数组数据的5种方法

1.原因 为什么在 React 中,状态(state)如果是数组类型,需要单独处理&#xff1f;主要有以下几个原因: 不可变性(Immutability): React 中的状态是不可变的,意味着我们不能直接修改状态,而是要创建一个新的状态对象。对于数组来说,直接修改数组元素是不符合 React 的设计原则的…