一.流程图
二.如何创建socket
三.服务器端代码
import socket
#1.创建套接字
udp_ser_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#2,绑定本地的相关信息,服务器端程序(比如一键报警程序),需要绑定
#两个参数,IP地址和端口号。** ip地址默认不写,因为一个网卡可以配多个IP地址,默认选系统中第一个
local_addr=('',2000)
#bind的参数是本地的相关信息
udp_ser_socket.bind(local_addr)
# 3. 等待接收对方发送的数据,1024表示本次接收的最大字节数
recv_data=udp_ser_socket.recvfrom(1024)
#4.显示接收到的数据
#对收到的数据解码
print(recv_data[0].decode('utf8'))
#客户端地址在recv_data[1]里,形式为(IP地址,客户端第一个sento随机开启的端口)
client_address=recv_data[1]
#5.发信息给客户端
udp_ser_socket.sendto('来自Ubuntu的信息'.encode(),client_address)
#6.关闭套接字
udp_ser_socket.close()
四.客户端代码
import socket
#1.初始化一个套接字
udp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2. 发送数据到('192.168.242.128', 2000)
aim_address = ('192.168.242.128', 2000)
# sento函数两个参数,发送信息和目的地址。而自己的ip地址默认带着,自己的端口随机开启
udp_client_socket.sendto('来自windows的信息'.encode('utf8'), aim_address)
#3.接收服务器端发来的数据
recv_data = udp_client_socket.recvfrom(1024)
print(recv_data[0].decode('utf8'))
#4.关闭
udp_client_socket.close()
五.运行
ctrl alt T 调出终端,输入以上代码,IP要写目的地址,先运行服务器端,再运行客户端,因为需要UDP服务器端先绑定信息,并开始接收
六.注意事项
1.绑定bind 后查看本地端口的状态
netstat -an|grep 2000
2.如何杀被占用的进程
3.收发数据注意转换
4.ctrl +c
5.若写udp_ser_socket.sendto(b'Ubuntu'.,client_address) 引号里面就不应该带汉字
6.注意方法名别输错比如sento
7.UDP必须先一方先接收,另一方才能发送,且接收和发送是必须是成对的
8.写代码,IP地址一定要对应好,否则会出错
9.没启动服务器端的报错