socket和udp


1、什么是Socket

socket(简称:套接字),是支持TCP/IP的网络通信的基本操作单元,可以看作是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。
它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于Socket来完成通信的。例如我们每天浏览网页、QQ聊天、收发Email等。

2、创建socket

在Python中使用socket模块的socket类就可以完成:

import socket
socket.socket(AddressFamily,Type)

在这里插入图片描述

"""
导入模块 socket
创建套接字,使用IPv4 UDP方式
数据的传递
关闭套接字
"""
# 导入模块 socket
import socket
# 创建套接字,使用IPv4 UDP方式
#socket.socket(协议类型,传输方式)
#参数一
#socket.AF_INET 使用IPv4
#socket.AF_INET6 使用IPv6
#参数二
#socket.SOCK_DGRAM 使用UDP传输方式
#socket.SOCK_STREAM 使用TCP传输方式
udp_scoket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 数据的传递
# 关闭套接字
udp_scoket.close()

3、udp网络程序—发送数据


"""
导入模块 socket
创建套接字,使用IPv4 UDP方式
数据的传递
关闭套接字

"""
# 导入模块 socket
import socket
# 创建套接字,使用IPv4 UDP方式
#socket.socket(协议类型,传输方式)
#参数一
#socket.AF_INET 使用IPv4
#socket.AF_INET6 使用IPv6
#参数二
#socket.SOCK_DGRAM 使用UDP传输方式
#socket.SOCK_STREAM 使用TCP传输方式
udp_scoket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 数据的传递
# udp_scoket.sendto(要发送的数据的二进制格式,对方IP和端口号)
#参数一:要发送的数据的二进制格式
#如果发送的格式为字符串,需要转化成二进制 "字符串".encode()
#参数二:对方的IP地址和端口号  address类型
#要求IP和端口号是一个元组:第一个元素是字符串类型的IP地址, 整数类型的端口号
udp_scoket.sendto("你好".encode(),("192.168.xxx.xxx",8080))
# 关闭套接字
udp_scoket.close()

4、udp网络程序—发送和接收数据

'''
1、导入模块
2、创建套接字
3、发送数据
4、解收二进制数据
5、解码数据、得到字符串
6、输出显示接收到的内容
7、关闭套接字
'''
# 1、导入模块
import  socket
# 2、创建套接字
upd_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 3、发送数据
upd_socket.sendto("你好".encode(),("192.168.xxx.xxx",8080))
# 4、解收二进制数据
#从套接字中接收1024个字节的数据
#此方法会造成程序的阻塞,等待另一台计算机发送数据
#如果对方发数据了,recvfrom会自动解除阻塞
#如果对方没有发送数据,会一直等待
recv_data=upd_socket.recvfrom(1024)
# 5、解码数据、得到字符串
#将二进制数据转换成字符串   ”二进制数据“.decode()
rec_text=recv_data[0].decode()
# 6、输出显示接收到的内容
print("来自:",recv_data[1],"的消息:",recv_data[0])
# 7、关闭套接字
upd_socket.close()

5、Python3编码转换

网络中数据的传输是以二进制(字节码)的方式来进行的,所以我们需要通过对Unicode字符串内容进行编码和解码才能达到数据传输的目的

在Python中

str ->bytes.encode编码 编码就是将字符串转换成字节码,涉及到字符串的内部表示
bytes ->str.decode 解码 解码就是将字节码转换成字符串,将比特位显示成字符

在这里插入图片描述

str="我爱你"
str_data=str.encode()
print(str_data)

text=str_data.decode("UTF-8")
print(text)
#字符集默认就是使用的UTF-8
text2=str_data.decode()
print(text2)
#结果
b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0'
我爱你
我爱你

6、udp绑定端口——发送端

socket.bind(端口号) ——将socket对象绑定到一个地址,但这个地址必须是没有被占用的,否则会连接失败。

"""
导入模块 socket
创建套接字,使用IPv4 UDP方式
数据的传递
关闭套接字  
"""
#绑定发送段端口
# 导入模块 socket
import socket
# 创建套接字,使用IPv4 UDP方式
udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#绑定发送端的端口
#udp_socket.bind(("本机IP",绑定的端口号))
#必须是以元组的形式
#ip地址可以省略,省略后表示自己的IP地址
udp_socket.bind(("",8888))
# 数据的传递
udp_socket.sendto("你好".encode(),("192.168.xxx.xxx",8080))
# 关闭套接字
udp_socket.close()


7、udp绑定端口——接收端

'''
1、导入模块
2、创建套接字
3、绑定端口
4、接受对方发送的数据
5、解码数据
6、输出显示
7、关闭套接字
'''
#绑定接收端端口
# 1、导入模块
import  socket
# 2、创建套接字
udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 3、绑定端口
udp_socket.bind(("",6666))
# 4、接受对方发送的数据
recv_data,ip_port=udp_socket.recvfrom(1024)
# 5、解码数据
print("接收[%s]发送的信息:%s"%(str(ip_port),recv_data.decode()))
# 6、输出显示

# 7、关闭套接字
udp_socket.close()

8、udp广播

广播地址(Broadcast Address)是专门用于同时向网络中所有工作站进行发送一个地址。在使用TCP/IP协议的网络中,主机标识段host ID为全1的IP地址为广播地址
IP地址的网络字段和主机字段全为1的IP地址:255.255.255.255

所以向255.255.255.255 发送消息就是发送广播消息
'''
 1、导入模块
 2、创建套接字
 3、设置广播权限
 4、发送数据
 5、关闭套接字
'''

# 1、导入模块
import  socket
# 2、创建套接字
upd_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 3、设置广播权限
# upd_socket.setsockopt(套接字,属性,属性值)
# socket.SOL_SOCKET 当前的套接字
# socket.SO_BROADCAST 广播属性
upd_socket.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,True)
# 4、发送数据
upd_socket.sendto("大家好".encode(),("255.255.255.255",8080))
# 5、关闭套接字
upd_socket.close()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值