网络编程及udp发送接收数据
01.ip地址介绍及其分类
IP地址与IP协议
规定网络地址的协议叫ip协议,它定义的地址称为ip地址。广泛采用的v4版本的即ipv4,它规定网络地址由32位2进制表示。
注意:
• 一个ip地址通常写成四段十进制数
• 范围0.0.0.0-255.255.255.255
ip地址分类图
端口分类
1.知名端口(well known ports)
- 80端口分配给HTTP服务
- 21端口分配给FTP服务
• 范围是从0到1023
2.动态端口 - 动态端口的范围是从1024-65535
注意:
• 在同一时间只会有一个程序占用一个端口,不可能在同一个计算机上同一时间有两个程序占用一个端口。
02.socket简介
socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。白话说,socket就是两个节点为了互相通信,而在各自家里装的一部’电话’。
02.1UDP的发送和接收
02.1.1 UDP的发送
步骤:
1.创建套接字
2.使用套接字收/发数据
3.关闭套接字
def main():
# 1.创建套接字
udp_s=socket.socket(family=socket.AF_INET,type=socket.SOCK_DGRAM)
#绑定窗口
udp_s.bind(("",8080))
while True:
send_data=input("请输入要发送的数据:")
if send_data=="q":
break
# 2.发送数据
udp_s.sendto(send_data.encode("gbk"),("192.168.43.195",8080))
# 3.关闭套接字
udp_s.close()
if __name__ == '__main__':
main()
02.1.2 UDP的接收
步骤:
1.创建套接字
2.绑定本地信息(IP和端口)
3.接受数据
4.打印数据
5.关闭套接字
import socket
def main():
#1.创建套接字
udp_s=socket.socket(family=socket.AF_INET,type=socket.SOCK_DGRAM)
#2.绑定本地信息
udp_s.bind(("192.168.43.195",7788)) #ip地址与端口号注意为元组,"":代表本地ip
# 3.接收数据
recv_data=udp_s.recvfrom(1024)
# print(recv_data) #(b'i love you', ('192.168.43.195', 8080))
data,info=recv_data #(ip,port):data
# print(data,info)
print(f"{info}:{data}")
#3.关闭套接字
udp_s.close()
if __name__ == '__main__':
main()
03.实例:实现UDP的同时发送及接收
import socket
def send_data(udp_s):
"""
发送数据
"""
send_d=input("请输入要发送的数据:")
udp_s.sendto(send_d.encode("gbk"),("192.168.43.195",8080))
def recv_data(udp_s):
"""
接收数据
"""
recv = udp_s.recvfrom(1024)
print(recv)
def main():
#1.创建套接字
udp_s=socket.socket(family=socket.AF_INET,type=socket.SOCK_DGRAM)
#2.绑定本地ip与端口
udp_s.bind(("",7979))
#3.先发送再接收
while True:
#发送
send_data(udp_s)
#接收
recv_data(udp_s)
#4.关闭套接字
udp_s.close()
if __name__ == '__main__':
main()