udp

upd

UDP是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

套接字

网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。

1
2
3
4
5
import socket
socket.socket(AddressFamily, Type)

Address Family:可以选择 AF_INET(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET
Type: 套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议)

客户端

1
2
3
4
5
6
7
8
9
10
11
client_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

'''
# 告诉系统内核刚创建的套接字用来进行广播
client_sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
client_sock.sendto(data.encode("utf-8"), ("<broadcast>", 8080))
'''


lient_sock.sendto(传送的数据转换成字节.encode("utf-8"), 接受的服务器ip:port)
client_sock.close()

服务端

1
2
3
4
5
6
7
8

server_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# ip如果不指明,表示本机的任何一个ip地址
server_addr = ("", 8080)
server_sock.bind(server_addr)
# recvfrom与recv方法类似,不同的是可以将发送数据的客户端的地址也返回
# 注意python3中收到的数据receive_data是bytes类型
receive_data, client_addr = server_sock.recvfrom(1024)
-------------end-------------
0%