08-udp端口绑定(发送端)

目标

  • 知道使用 bind 方法在发送端 给套接字绑定端口

1. udp网络程序-会变的端口号

  • 会变的端口号

重新运行多次脚本,然后在“网络调试助手”中,看到的现象如下:

image-20180608182319838

说明: * 每重新运行一次网络程序,上图中红圈中的数字,不一样的原因在于,这个数字标识这个网络程序,当重新运行时,如果没有确定到底用哪个,系统默认会随机分配 * 记住一点:这个网络程序在运行的过程中,这个就唯一标识这个程序,所以如果其他电脑上的网络程序如果想要向此程序发送数据,那么就需要向这个数字(即端口)标识的程序发送即可

image-20180812221202254

2. udp绑定信息

2.1 绑定信息

一般情况下,在一台电脑上运行的网络程序有很多,为了不与其他的网络程序占用同一个端口号,往往在编程中,udp的端口号一般不绑定

但是__如果需要做成一个服务器端的程序的话,是需要绑定的__,想想看这又是为什么呢?

如果报警电话每天都在变,想必世界就会乱了,所以一般服务性的程序,往往需要一个固定的端口号,这就是所谓的__端口绑定__

image-20180608215310518

2.2 核心方法

  • socket.bind((IP地址, 端口号)) ——将socket对象绑定到一个地址,但这个地址必须是没有被占用的,否则会连接失败。这里的address一般是一个ip,port对,如(‘localhost’, 10000)

2.3实现效果

udp-bind

2.4 代码实现

import socket

# 创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#         ip地址            端口号
addr = ("192.168.31.122", 7890)
# 发送端绑定,绑定发送端的ip和端口
# 发送端一定要绑定ip和端口吗?
udp_socket.bind(addr)

# 发送数据
udp_socket.sendto("hello".encode(), ("192.168.31.167", 8080))

# 关闭套接字
udp_socket.close()

image-20180805103008648