Python 3 udp套接字

TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议

使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达并不清楚。

虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议

基于UDP的套接字 udp是无链接的,先启动哪一端都不会报错

udp服务端
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
ss = socket()   #创建一个服务器的套接字

ss.bind()       #绑定服务器套接字

inf_loop:       #服务器无限循环

     cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送)

ss.close()                          # 关闭服务器套接字
udp客户端
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
cs = socket()   # 创建客户套接字

comm_loop:      # 通讯循环

    cs.sendto()/cs.recvfrom()   # 对话(发送/接收)

cs.close()                      # 关闭客户套接字
udp套接字简单示例
from socket import *

udp_server=socket(AF_INET,SOCK_DGRAM)

udp_server.bind(('127.0.0.1',8080))

 

while True:

    data,client_addr=udp_server.recvfrom(1024)

    print(data,client_addr)

    udp_server.sendto(data.upper(),client_addr)
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from socket import *

udp_client=socket(AF_INET,SOCK_DGRAM)

while True:

    msg=input('>>: ').strip()

    udp_client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))

    data,server_addr=udp_client.recvfrom(1024)

print(data.decode('utf-8'))
基于udp套接字不会粘包
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from socket import *

udp_server=socket(AF_INET,SOCK_DGRAM)

udp_server.bind(('127.0.0.1',8080))

 

data1,client_addr=udp_server.recvfrom(1)  # windows 系统会报异常 linux 系统不会报异常

print('data1',data1)

data2,client_addr=udp_server.recvfrom(1024)

print('data2',data2)
from socket import *

 

udp_client=socket(AF_INET,SOCK_DGRAM)

 

udp_client.sendto('hello'.encode('utf-8'),('127.0.0.1',8080))

udp_client.sendto('world'.encode('utf-8'),('127.0.0.1',8080))
udp套接字的并发
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import socketserver

class MyUDPhandler(socketserver.BaseRequestHandler):

    def handle(self):

        print(self.request)

        self.request[1].sendto(self.request[0].upper(),self.client_address)

 

if __name__ == '__main__':

    s=socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyUDPhandler)

    s.serve_forever()
from socket import *

udp_client=socket(AF_INET,SOCK_DGRAM)

while True:

    msg=input('>>: ').strip()

    udp_client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))

    data,server_addr=udp_client.recvfrom(1024)

    print(data.decode('utf-8'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值