当前位置 : 主页 > 编程语言 > python >

Python 实战 udp网络程序-发送、接收数据

来源:互联网 收集:自由互联 发布时间:2022-07-05
仅用学习参考 1. udp网络程序-发送数据 创建一个基于udp的网络程序流程很简单,具体步骤如下: 创建客户端套接字 发送/接收数据 关闭套接字 实验拓扑 在windows端,采用​​NetAssist​​

仅用学习参考

1. udp网络程序-发送数据

创建一个基于udp的网络程序流程很简单,具体步骤如下:

  • 创建客户端套接字
  • 发送/接收数据
  • 关闭套接字
  • Python 实战 udp网络程序-发送、接收数据_套接字


    实验拓扑


    Python 实战 udp网络程序-发送、接收数据_数据_02


    • 在windows端,采用​​NetAssist​​网络调试工具接受数据,如下:

    Python 实战 udp网络程序-发送、接收数据_数据_03


    • 在Centos7系统,编写python代码发送UDP数据请求。

    代码如下:

    #coding=utf-8

    from socket import *

    # 1. 创建udp套接字
    udp_socket = socket(AF_INET, SOCK_DGRAM)

    # 2. 准备接收方的地址
    # '192.168.1.103'表示目的ip地址
    # 8080表示目的端口
    dest_addr = ('192.168.1.2', 8080) # 注意 是元组,ip是字符串,端口是数字

    # 3. 从键盘获取数据
    #send_data = input("请输入要发送的数据:")

    # 4. 发送数据到指定的电脑上的指定程序中
    udp_socket.sendto(b"hahahah", dest_addr)
    #udp_socket.sendto(send_data.encode('utf-8'), dest_addr)

    # 5. 关闭套接字
    udp_socket.close()

    运行现象:

    在Centos7中运行脚本:


    Python 实战 udp网络程序-发送、接收数据_套接字_04


    优化一下,使用input方法来发送数据,代码如下:

    [root@server01 work]# vim client.py

    #coding=utf-8

    from socket import *

    # 1. 创建udp套接字
    udp_socket = socket(AF_INET, SOCK_DGRAM)

    # 2. 准备接收方的地址
    # '192.168.1.103'表示目的ip地址
    # 8080表示目的端口
    dest_addr = ('192.168.1.2', 8080) # 注意 是元组,ip是字符串,端口是数字

    # 3. 从键盘获取数据
    send_data = input("请输入要发送的数据:")

    # 4. 发送数据到指定的电脑上的指定程序中
    #udp_socket.sendto(b"hahahah", dest_addr)
    udp_socket.sendto(send_data.encode('utf-8'), dest_addr)

    # 5. 关闭套接字
    udp_socket.close()

    执行如下:

    [root@server01 work]# python client.py
    请输入要发送的数据:"hello server"
    [root@server01 work]#


    Python 实战 udp网络程序-发送、接收数据_套接字_05


    2. udp网络程序-发送、接收数据

    客户端发送数据的代码如下:

    [root@server01 work]# vim client.py

    #coding=utf-8

    from socket import *

    # 1. 创建udp套接字
    udp_socket = socket(AF_INET, SOCK_DGRAM)

    # 2. 准备接收方的地址
    # '192.168.1.103'表示目的ip地址
    # 8080表示目的端口
    dest_addr = ('192.168.116.128', 7788) # 注意 是元组,ip是字符串,端口是数字

    # 3. 从键盘获取数据
    send_data = input("请输入要发送的数据:")

    # 4. 发送数据到指定的电脑上的指定程序中
    #udp_socket.sendto(b"hahahah", dest_addr)
    udp_socket.sendto(send_data.encode('utf-8'), dest_addr)

    # 5. 关闭套接字
    udp_socket.close()

    服务端接收数据的代码如下:

    [root@server01 work]# vim server.py

    #coding=utf-8

    from socket import *

    # 1. 创建套接字
    udp_socket = socket(AF_INET, SOCK_DGRAM)

    # 2. 绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配
    local_addr = ('', 7788) # ip地址和端口号,ip一般不用写,表示本机的任何>一个ip
    udp_socket.bind(local_addr)

    # 3. 等待接收对方发送的数据
    recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字节数

    # 4. 显示接收到的数据
    print(recv_data[0].decode('gbk'))

    # 5. 关闭套接字
    udp_socket.close()

    测试执行如下:


    Python 实战 udp网络程序-发送、接收数据_套接字_06


    从上面看,udp的之前数据已经成功传输。那么怎么循环传递数据呢?


    多次发送,才能多次接收

    3. udp网络程序-多次发送、接收数据

    客户端设置循环发送数据,当输入stop的时候,停止发送。
    代码如下:

    [root@server01 work]# vim client.py

    #coding=utf-8

    from socket import *

    # 1. 创建udp套接字
    udp_socket = socket(AF_INET, SOCK_DGRAM)

    # 2. 准备接收方的地址
    # '192.168.116.128'表示目的ip地址
    # 7788表示目的端口
    dest_addr = ('192.168.116.128', 7788) # 注意 是元组,ip是字符串,端口是数字

    while True:
    # 3. 从键盘获取数据
    send_data = input("请输入要发送的数据:")

    # 4. 发送数据到指定的电脑上的指定程序中
    udp_socket.sendto(send_data.encode('utf-8'), dest_addr)

    # 发送stop,停止服务
    if send_data == "stop":
    break


    # 5. 关闭套接字
    udp_socket.close()

    服务端设置循环接收数据,代码如下:

    [root@server01 work]# vim server.py

    #coding=utf-8

    from socket import *

    # 1. 创建套接字
    udp_socket = socket(AF_INET, SOCK_DGRAM)

    # 2. 绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配
    local_addr = ('', 7788) # ip地址和端口号,ip一般不用写,表示本机的任何一个ip
    udp_socket.bind(local_addr)

    while True:
    # 3. 等待接收对方发送的数据
    recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字节数

    # 4. 显示接收到的数据
    recv_result = recv_data[0].decode('gbk')
    print(recv_result)

    # 显示对方的ip和端口
    print(recv_data[1])

    if recv_result == "stop":
    break

    # 5. 关闭套接字
    udp_socket.close()

    执行如下:


    Python 实战 udp网络程序-发送、接收数据_数据_07


    从右边可以看到,客户端发送过来的端口每次都是变化的。那么能否固定一个端口号呢?

    4. udp网络程序-固定客户端发送的端口号

    客户端设置绑定发送数据的端口号,代码如下:

    [root@server01 work]# vim client.py

    #coding=utf-8

    from socket import *

    # 1. 创建udp套接字
    udp_socket = socket(AF_INET, SOCK_DGRAM)

    # 绑定客户端发送数据的端口号
    local_addr = ('', 8008) # ip地址和端口号,ip一般不用写,表示本机的任何一个ip
    udp_socket.bind(local_addr)

    # 2. 准备接收方的地址
    # '192.168.1.103'表示目的ip地址
    # 8080表示目的端口
    dest_addr = ('192.168.116.128', 7788) # 注意 是元组,ip是字符串,端口是数字

    while True:
    # 3. 从键盘获取数据
    send_data = input("请输入要发送的数据:")

    # 4. 发送数据到指定的电脑上的指定程序中
    udp_socket.sendto(send_data.encode('utf-8'), dest_addr)

    # 发送stop,停止服务
    if send_data == "stop":
    break


    # 5. 关闭套接字
    udp_socket.close()

    执行如下:


    Python 实战 udp网络程序-发送、接收数据_数据_08

    Python 实战 udp网络程序-发送、接收数据_套接字_09


    关注微信公众号,回复【资料】、Python、PHP、JAVA、web,则可获得Python、PHP、JAVA、前端等视频资料。


    上一篇:Python 操作文件
    下一篇:没有了
    网友评论