网络编程——UDP

目录

UDP的服务器端

UDP的echo客户端代码

UDP的echo服务器端代码


UDP的服务器端

        先运行服务器端,再运行客户端

        服务端:

# 开发者:Virtuous
# 开发版本:1.0
# 开发时间: 2022/9/20 21:50
from socket import *

# 1 创建一个服务器的 socket
socket_server=socket(AF_INET,SOCK_DGRAM)

# 2 定义服务器的 IP 地址和端口号
host_post=('172.20.10.4',8090) #端口随便

# 3 服务器端的 Socket 来绑定地址和端口,只有绑定率地址和端口,才能称之为服务器的 socket 
socket_server.bind(host_post)  # 到这才完全创建好

# 4 接收客户端发送过来的额数据,每次接收 1 kb 的数据,收到的每一个数据报,里面的是一个元组,
#       第一个值是数据内容,第二个值是源地址和源端口号
data=socket_server.recvfrom(1024) #1024 字节,即 1 kb
#如果客户端没有发消息过来,服务端就会一直停在这

# 变成字符串,解码
print(data[0].decode('utf-8'))
print(data) # 报文

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

         客户端:

# 开发者:Virtuous
# 开发版本:1.0
# 开发时间: 2022/9/20 22:08
from socket import *

# 创建一个 UDP 协议的套接字,然后发送一条数据到网络上的另一个进程

# 1 创建套接字 网络进程通信 + UDP 协议
client_socket=socket(AF_INET,SOCK_DGRAM) # DGRAM 翻译成中文就是数据包的意思

# 2 定义一个接收目标
server_host_post=('172.20.10.4',8090)

# 3 准备即将发送的数据,
datas=input('请输入: ').encode('utf-8') #输入的字符串输出无法通信,要转成字节数据

# 4 发送数据,表示一个进程是通过 IP + 端口 + 协议
client_socket.sendto(datas,server_host_post) # 数据 + 目的地地址

print('发送完成')

# 关闭套接字,其实就是释放了系统资源,非常重要
client_socket.close()


UDP的echo客户端代码

需求:

  • 客户可以发送多条

  • 客户端如果发送了一个  ‘ exit ’ , 则客户端就退出

  • 服务端收到了什么就返回什么 

# 开发者:Virtuous
# 开发版本:1.0
# 开发时间: 2022/9/21 3:26
from socket import *

# 定义变量,是否退出客户端的标记
flag=True

# 定义变量 网络进程通信 + UDP 协议
client_socket=socket(AF_INET,SOCK_DGRAM)

while flag:
    # 定义接收消息的目标
    server_host_post=('172.20.10.4',8090)

    # 准备发送数据
    datas=input('请输入: ').encode('utf-8')

    # 发送数据
    client_socket.sendto(datas,server_host_post)

    # 从服务器接收返回过来的数据
    print('返回的数据:',client_socket.recvfrom(1024)[0].decode('utf-8'))

    if(datas=='exit'):
        flag=False

print('发送成功')

# 关闭资源
client_socket.close()

      

UDP的echo服务器端代码

需求:

  • 谁先发数据就是客户端

  • 一般服务器需要绑定端口,目的是为了让客户端正确发送到此进程(不会动态分配)

  • 服务端:

# 开发者:Virtuous
# 开发版本:1.0
# 开发时间: 2022/9/21 3:52
from socket import *

# 创建服务端的 socket
server_socket=socket(AF_INET,SOCK_DGRAM)

# 定义服务器端的 IP 地址 + 端口
host_post=('172.20.10.4',8090)

# 绑定
server_socket.bind(host_post)

while True: # 服务端 不关闭
    # 接收客户端数据
    data=server_socket.recvfrom(1024)

    #原路返回
    server_socket.sendto(data[0],data[1])

    # 变成字符串,解码
    print(data[0].decode('utf-8'))

server_socket.close()

ps:凌晨四点,我见海棠花未眠

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

星梦∞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值