zoukankan      html  css  js  c++  java
  • Python UDP 协议网络编程《二》

    1、主题

    今天分享的内容是在上一篇文章“Python UDP 协议网络编程《一》”的基础上做了一些优化和改进:

    • 客户端增加了可接收的功能

    • 增加了多线程的处理功能

    • 服务端增加可回复消息的功能

    • 对接收消息进行验证的功能

    2、Python 代码实现

    client.py 代码如下:

     1 import threading
     2 from socket import socket,AF_INET,SOCK_DGRAM
     3 udp_socket = socket(AF_INET, SOCK_DGRAM)#建议upd连接
     4 local_address = ('127.0.0.1', 8000)#定义了本机的ip and port
     5 udp_socket.bind(local_address)#绑定本机的ip and port
     6
     7 def udp_secv_msg():
     8    while 1:
     9        udp_sockets = socket(AF_INET, SOCK_DGRAM)  # 建立udp socker连接
    10        server_address = ('127.0.0.1', 10000)  # 定义了服务端的ip and port
    11        udp_sockets.bind(server_address)  # 服务端绑定ip and port
    12        recv_data = udp_sockets.recvfrom(1024)  # 收数据等待
    13        print('接收的内容:', recv_data[0].decode('utf-8'))  # 显示收到的信息
    14        print('发送人的地址:', recv_data[1])  # 显示收到的信息
    15    udp_sockets.close()
    16
    17 def udp_send_msg():
    18    while 1:#无限发送消息
    19        resvice_address=('127.0.0.1',9000) #定义了接收消息机器的ip and port
    20        data=input("<<<:")#接收键盘的输出信息
    21        udp_socket.sendto(str(data).encode("utf-8"),resvice_address)#向接收消息机器发送消息
    22    udp_socket.close()
    23
    24
    25 if __name__ == '__main__':
    26    print("the client of ip:%s and port:%d is running"%(local_address))
    27    t1=threading.Thread(target=udp_secv_msg)
    28    t2=threading.Thread(target=udp_send_msg)
    29    t1.start()
    30    t2.start()
    31    t1.join()
    32    t1.join()

    server.py 代码如下:

     1 from socket import socket,AF_INET,SOCK_DGRAM
     2 local_address = ('127.0.0.1', 9000)  # 定义本服务器的ip and port
     3
     4 def recv_server():
     5    udp_socket = socket(AF_INET, SOCK_DGRAM)#建立udp socker连接
     6    udp_socket.bind(local_address)#服务端绑定ip and port
     7    recv_data = udp_socket.recvfrom(1024)#收数据等待
     8    print('接收的内容:', recv_data[0].decode('utf-8'))#显示收到的信息
     9    print('发送人的地址:', recv_data[1])#显示收到的信息
    10
    11    msg=recv_data[0].decode('utf-8')
    12    msg_length=len(msg.split(" "))
    13    if(msg_length==2):
    14        username=msg.split(" ")[0]
    15        password=msg.split(" ")[1]
    16        if (login(username, password)):
    17            print("登录成功!!!")
    18            data="回车后再输入:admin 123456 test,我可以给你惊喜!!!"
    19            send_msg(data)
    20    elif(msg_length==3):
    21        username = msg.split(" ")[0]
    22        password = msg.split(" ")[1]
    23        message= msg.split(" ")[2]
    24        if (login(username, password) and message == "test"):
    25            data = "我骗了你,哈哈!!!" * 20
    26            send_msg(data)
    27    else:
    28        pass
    29
    30 def send_msg(data):
    31    client_address = ('127.0.0.1', 7000)  # 定义了本机的ip and port
    32    server_address = ('127.0.0.1', 10000)  # 定义了接收消息机器的ip and port
    33    udp_sockets = socket(AF_INET, SOCK_DGRAM)  # 建立udp socker连接
    34    udp_sockets.bind(client_address)  # 服务端绑定ip and port
    35    udp_sockets.sendto(str(data).encode("utf-8"), server_address)  # 向接收消息机器发送消息
    36    udp_sockets.close()
    37
    38
    39
    40 def login(username,password):
    41    if(username=="admin" and password=="123456"):
    42        return True
    43    else:
    44        return False
    45
    46 if __name__ == '__main__':
    47    print("the server ip:%s and the port:%d is running"%(local_address))
    48    while True:
    49       recv_server()

    3、温馨提示

    上面的代码需逐行阅读才能体会其中真正的精髓,建议理解后在本地进行实操,可有助于更好的理解今天分享的内容,记得在学习今天的内容之前,先学习上一篇文章“Python UDP 协议网络编程《一》”。

    欢迎关注【无量测试之道】公众号,回复【领取资源】,
    Python编程学习资源干货、
    Python+Appium框架APP的UI自动化、
    Python+Selenium框架Web的UI自动化、
    Python+Unittest框架API自动化、

    资源和代码 免费送啦~
    文章下方有公众号二维码,可直接微信扫一扫关注即可。

    备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

     添加关注,让我们一起共同成长!

  • 相关阅读:
    JavaScript的DOM操作(节点操作)
    php算法
    php常用函数
    去掉表单中的回车、换行、空格
    linux(centos)搭建SVN服务器
    同一台机子上用多个git 账号
    房屋交易合同
    简单的css 菜单
    Spring Collections XML 配置
    不同java 版本的新功能
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/13748706.html
Copyright © 2011-2022 走看看