wordpress培训类网站,东莞寮步华衍学校,公司推广发帖网站怎么做,订阅号可以做网站么UDP服务器接收数据和发送数据
UDP协议时#xff0c;不需要建立连接#xff0c;只需要知道对方的IP地址和端口号#xff0c;就可以直接发数据包。但是#xff0c;能不能到达就不知道了。虽然用UDP传输数据不可靠#xff0c;但它的优点是和TCP比#xff0c;速度快#xf…UDP服务器接收数据和发送数据
UDP协议时不需要建立连接只需要知道对方的IP地址和端口号就可以直接发数据包。但是能不能到达就不知道了。虽然用UDP传输数据不可靠但它的优点是和TCP比速度快对于不要求可靠到达的数据就可以使用UDP协议。
创建Socket时SOCK_DGRAM指定了这个Socket的类型是UDP。绑定端口和TCP一样但是不需要调用listen()方法而是直接接收来自任何客户端的数据。recvfrom()方法返回数据和客户端的地址与端口这样服务器收到数据后直接调用sendto()就可以把数据用UDP发给客户端。
UDP编程的实现
【示例】UDP接收数据
#codingutf-8
from socket import *
s socket(AF_INET, SOCK_DGRAM) #创建套接字
#绑定接收信息端口
s.bind((127.0.0.1, 8888)) #绑定一个端口ip地址和端⼝号
print(等待接收数据)
redata s.recvfrom(1024) #1024表示本次接收的最⼤字节数
print(redata)
print(f收到远程信息:{redata[0].decode(gbk)}, from {redata[1]})
s.close()【示例】UDP发送数据
from socket import *
s socket(AF_INET, SOCK_DGRAM) #创建套接字
addr (127.0.0.1, 8888) #准备接收方地址
data input(请输入)
#发送数据时python3需要将字符串转成byte
s.sendto(data.encode(gbk),addr) #默认的网络助手使用的编码是gbk
s.close()UDP持续通信
【示例】UDP接收数据
#codingutf-8
from socket import *
s socket(AF_INET,SOCK_DGRAM) #创建UDP类型的套接字
s.bind((127.0.0.1,8888)) #绑定端口,ip可以不写
print(等待接收数据)
while True:recv_data s.recvfrom(1024) #1024表示本次接收的最大字节数recv_content recv_data[0].decode(gbk)print(f收到远程信息:{recv_content},from {recv_data[1]})if recv_content 88:print(结束聊天)break
s.close()【示例】UDP发送数据
#codingutf-8
from socket import *
s socket(AF_INET,SOCK_DGRAM) #创建UDP类型的套接字
addr (127.0.0.1,8888)
while True:data input(请输入)s.sendto(data.encode(gbk),addr)if data 88:print(结束聊天)break
s.close()UDP多线程结合自由通信
结合多线程实现UDP双向自由通信 UDP 不同于 TCP不存在请求连接和受理过程因此在某种意义上无法明确区分服务器端和客户端只是因为其提供服务而称为服务器端。 如下服务端、客户端代码几乎一模一样注意接收和发送端口对应即可。
【示例】UDP实现多线程服务端
#codingutf-8
from socket import *
from threading import Thread
udp_socketsocket(AF_INET,SOCK_DGRAM)
#绑定接收信息端口
udp_socket.bind((127.0.0.1,8989))
#不停接收
def recv_data():while True:redata udp_socket.recvfrom(1024)print(f收到信息:{redata[0].decode(gbk)}, from {redata[1]})
#不停发送
def send_data():while True:datainput(输入信息)addr(127.0.0.1,8080)udp_socket.sendto(data.encode(gbk),addr)
if __name____main__:# 创建两个线程t1Thread(targetsend_data)t2Thread(targetrecv_data)t2.start()t1.start()t1.join()t2.join()【示例】UDP实现多线程客户端
#codingutf-8
from socket import *
from threading import Thread
udp_socketsocket(AF_INET,SOCK_DGRAM)
#绑定接收信息端口
udp_socket.bind((127.0.0.1,8080))
#不停接收
def recv_data():while True:redata udp_socket.recvfrom(1024)print(f收到信息:{redata[0].decode(gbk)}, from {redata[1]})
#不停发送
def send_data():while True:datainput(输入信息)addr(127.0.0.1,8989)udp_socket.sendto(data.encode(gbk),addr)
if __name____main__:# 创建两个线程t1Thread(targetsend_data)t2Thread(targetrecv_data)t2.start()t1.start()t1.join()t2.join()