注意:
UDP 不管他是否发送成功,只管发,因此即使服务端没有开启,UDP客户端依然好用
- python3只能收发二进制数据,需要显式转码,Python2则不需要
- python2 str 类型和bytes类型是一个类型,不信自己查看一下类型,没区别
data = data.encode(encoding="utf-8") # 转码的方法,data 是str类型
# 转换完成后data就变成了bytes类型了,有一些地方,必须用bytes才可以,
#转换后打印出来如下,返回下面,data本身不变,赋值后改变
b'{"a": "aaaa", "b": "s123d,lo"}'
# 转换回字符串按照下面这样
bytes.decode('utf-8')
- 发送数据
udpClient.sendto(data,addr) # 发送数据,addr = (IP,端口号) # 元祖形式
- 接收数据
data,addr = udpClient.recvfrom(bufsize) #接收数据和返回地址,data是二进制bytes类型,要想显示需要解码
print(data.decode(encoding="utf-8"),'from',addr)
全部代码演示
-
客户端代码:
'''
客户端
'''
from socket import *
HOST = '127.0.0.1';PORT = 9999;addr = (HOST,PORT) # 设置IP、端口号、
s = socket(AF_INET, SOCK_DGRAM) # 建立UDP的socket 这个称之为套接字。
data = 'abc';data = data.encode(encoding="utf-8") # 指定一个字符串,并转换成socket发送的二进制流。
while True:
s.sendto(data, addr) # 发送数据
# data, addr = s.recvfrom(1024) # 接收数据和返回地址
print (data.decode(encoding="utf-8"))
print(addr)
s.close()
-
服务端代码这里由Python2所写
# coding: utf-8
'''
# author : zhangjiawei
# @time : 19-6-20 上午8:55
# IDE : PyCharm
服务端
'''
from socket import *
HOST = '127.0.0.1'
PORT = 9999
'''
只要收到了客户端的请求,那么就会返回固定的话,在创建的时候,
只要使用SOCK_DGRAM即可创建udp的连接,在设置的时候,只要绑定地址和端口即可。
'''
s = socket(AF_INET, SOCK_DGRAM)
s.bind((HOST, PORT))
print '...waiting for message..'
while True:
data, address = s.recvfrom(1024)
print data, address,type(data)
s.sendto('this is the UDP server', address)
s.close()