目录
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:凌晨四点,我见海棠花未眠