【基于upd的服务端】
- 
创建套接字—>数据报套接字 
 sockfd = socket(AF_INET,SOCK_DGRAM)
- 
绑定服务端地址 
 sockfd.bind()
- 
消息的收发 
 data = recvfrom(buffersize)
 功能:接收UDP消息
 参数:每次最多接收消息的大小
 返回值:接收到的内容
 接收到的消息的发送者
 注意:
 recvfrom一次接收一个数据包,如果数据包超出了一次能接收的大小则会丢失没有收到的内容
 sendto(data,addr)
 功能:udp发送消息
 参数:data 要发送的内容 bytes(要求用bytes格式)
 addr 消息要发送给谁
 返回值:发送的字节
- 
关闭套接字 
 sockfd.close()
- 
补充 
 sys.argv
 功能:
 获取来自命令行的参数,形成一个(字符串)列表
 argv[0]是命令本身,其他内容默认以空格分割放到列表中
 示例:import sys print(sys.argv) 终端打印: tarena@tedu:~/pythonweb/day02$ python3 argv.py hello wangtiantian ['argv.py', 'hello', 'wangtiantian'] tarena@tedu:~/pythonweb/day02$ python3 argv.py 'hello python' ['argv.py', 'hello python']
- 
示例代码: 
udp_server.py
from socket import *
import sys
# 从命令行输入IP和端口
HOST = sys.argv[1]
PORT = int(sys.argv[2])
ADDR = (HOST,PORT)
# 创建数据报套接字
sockfd = socket(AF_INET,SOCK_DGRAM)
# 绑定地址
sockfd.bind(ADDR)
# 收发消息
while True:
    data,addr = sockfd.recvfrom(1024)
    print('Receive from %s:%s' % (addr,data.decode()))
    sockfd.sendto('收到你的消息'.encode(),addr)
sockfd.close()
udp_client.py
from socket import * 
import sys
if len(sys.argv) < 3:
    print('''
	argv is error!!!
	input as 
	python3 udp_client.py 127.0.0.1 8888
	''')
    raise
HOST = sys.argv[1]
PORT = int(sys.argv[2])
# 要访问的服务端地址
ADDR = (HOST,PORT)
# 创建套接字
sockfd = socket(AF_INET,SOCK_DGRAM)
while True:
    data = input('消息:')
    if not data:
	break
    sockfd.sendto(data.encode(),ADDR)
    data,addr = sockfd.recvfrom(1024)
    print('从服务器收到:',data.decode())
sockfd.close()
【tcp流式套接字和udp数据报套接字使用区别】
- 
流式套接字采用字节流的方式传输,而数据报套接字以数据包形式传输 
- 
tcp会产生粘包现象,udp不会 
- 
tcp编程保证数据传输的可靠性,udp则不保证 
- 
tcp需要listen accecp,udp不需要 
- 
tcp使用recv send进行消息收发,udp使用recvfrom和sendto 
   
【补充】
sendall()
功能:同send
参数:同send
返回值:发送成功返回None,发送失败返回异常
来源:CSDN
作者:雨醉东风
链接:https://blog.csdn.net/zhangxuelong461/article/details/104058804