python网络编程—UDP的echo服务

一、echo服务

echo服务是一种非常有用的用于调试和检测的工具,该协议接收到什么原样返回客户端

二、代码实现echo服务

需求 UDP客户端、客户端可以发送多条数据,2、客户端如果发送一个”exit“则表示客户端退出,客户端销毁套接字,不占用资源,3、服务器端收到什么就返回什么

客户端发送一个请求也需要端口,端口是随机分配的,创建一个UDP协议的套接字,然后发送一条数据到网络上的另外一个进程
服务端

from socket import *

# UDP客户端、创建一个服务器端的Socket
socket_server = socket(AF_INET, SOCK_DGRAM)

# 2、定义服务器端的ip地址和端口号
host_port = ('', 8090)       #todo 如果服务器是真实的物理小型服务器,IP地址有很多。任何本机的IP地址都绑定:使用空字符串

#todo 3、服务器端的Socket来绑定地址和端口,只有绑定了地址和端口,才能称为服务器的Socket
socket_server.bind(host_port)

while True:

    # 4、接收客户端发送过来的数据,每次接收1kb的数据,
    # 收到的每一个数据报,里面是一个元组,第一个值是数据内容,第二个值是源地址
    data = socket_server.recvfrom(1024)
    #todo  服务器收到数据之后原封不动的返回,而且是收到哪个客户端的信息就返回给那个客户端
    socket_server.sendto(data[0],data[1])  #todo 原地址和原端口号(客户端来的)

    print(data[0].decode('utf-8'))
    print(data)

# 5、关闭套接字、释放资源
socket_server.close()

客户端

#定义变量,是否退出客户端的标记
flag=True
# UDP客户端、创建套接字
client_socket = socket(AF_INET, SOCK_DGRAM)  # SOCK_DGRAM:UDP协议

while flag:
    # 2、定义一个接收消息的目标,8080是一个目标服务器的端口,127.0.0.1是目标服务器地址
    server_host_port = ('192.168.108.248', 8090)

    #todo  3、准备即将发送的数据,encode表示按照一种编码格式把数据变成字节数组bytes
    # 数据一定是字节数据才能发送
    datas = input('请输入:').encode('utf-8')

    # 4、发送数据,标识一个进程是通过ip+端口+协议
    client_socket.sendto(datas, server_host_port)

    #todo  5、一定可以从服务器上接收到返回过来的数据,打印服务器返回的数据,1024=1kb
    print('返回的数据是:',client_socket.recvfrom(1024)[0].decode(encoding='utf-8'))

    # 6、判断客户端是否发出exit
    if datas.decode('utf-8')=='exit':
        flag=False

# 5、关闭套接字,其实就是释放了系统资源
client_socket.close()

udp的服务器和客户端的区分:往往是通过请求服务提供服务来进行区分
请求服务的一方称为:客户端
提供服务的一方称为:服务器
一般情况下,服务器端,需要绑定端口,目的是为了让其他的客户端能够正确发送到此进程
客户端,一般不需要绑定,而是让操作系统随机分配,这样就不会因为需要绑定的端口被占用而导致程序无法运行的情况

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值