网络编程_TCP编程(一)

UDP概念:

用户数据报协议(User Datagram Protocol)是一个无连接的简单的面向数据报的运输层协议。

UDP协议的特点:

1)面向无连接的通讯协议

2)UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。

3)UDP是一个不可靠的协议

4)UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。

【使用情况】

因为UDP是面向消息的协议,通信时不需要建立连接,数据的传输自然是不可靠的,UDP一般用于多点通信和实时的数据业务,   比如

语音广播

视频

QQ

TFTP(简单文件传送)

SNMP(简单网络管理协议)

RIP(路由信息协议,如报告股票市场,航空信息)

DNS(域名解释)

首先我们来实现一个简单的UDP服务端

import socket

# 服务器的端口号
PORT = 8081
# 创建用于通讯的套接字socket对象
# 第一个参数指明地址集   第二个参数 socket.SOCK_DGRAM 指明使用的是UDP
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 为服务器绑定身份,方便客户端能够知道服务器
# bind接收元祖数据,元祖数据中包含服务器的IP地址和端口号
addres = ("", PORT)
server_socket.bind(addres)

# recvfrom 调用是传的参数 表示此次最多能接收多少字节数据,
# 开辟空间 不能太大也不能太小   太大 浪费空间,  太小 丢失数据
# 会返回两个数据
# recv_data 表示接收到的数据,bytes类型  recv_data.decode()方法将bytes类型转换成字符串类型
# client_address表示发送数据的客户端身份,即客户端的ip地址和端口号的元祖
recv_data, client_address = server_socket.recvfrom(1024)

print('接收到了客户端%s传来的数据:%s' % (client_address, recv_data.decode()))
# 关闭服务器端的套接字 socket
server_socket.close()
需要注意的是

socket.AF_INET 使用的是ipv4,如果要想使用ipv6可以使用AF_INET6

recvfrom默认的是堵塞,会等待客户端传输数据

recvfrom 返回两个返回值 一个是接收到的数据(bytes类型)  另一个是发送数据的客户端的身份


然后我们需要再编写一个客户端的程序用来发送数据

import socket

# 创建用于通讯的套接字socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 客户端无需绑定地址信息,操作系统会随机分配一个端口号 供通讯使用
# 向服务器发送数据
# 第一个参数:要发送的数据(仍然是bytes类型), 第二个参数接收方的地址信息ip和端口
msg = input("请输入要发送的数据内容")  # msg.encode()  将字符串类型转换为bytes类型
server_address = ('127.0.0.1', 8081)  # 指明服务器的ip地址和端口号
client_socket.sendto(msg.encode(), server_address)
# 传输后如果不在使用套接字进行通讯,要关闭套接字
client_socket.close()

好了现在我们的客户端已经写好,现在来让我们看看效果吧


ok,我们的demo测试成功了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值