码迷,mamicode.com
首页 > 编程语言 > 详细

python Day9

时间:2018-02-05 18:51:16      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:高效   启动   处理   ddr   bind   报错   客户   服务端   阻塞   

基于udp协议的套接字

s.recvfrom() 接收UDP数据
s.sendto() 发送UDP数据

UDP(user datagram protocol,用户数据报协议)是无连接的,面向消息的,提供高效率服务。
不会使用块的合并优化算法, 由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包
在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收端来说,就容易进行区分处理了。
即面向消息的通信是有消息保护边界的。

udp的recvfrom是阻塞的,一个recvfrom(x)必须对唯一一个sendinto(y),收完了x个字节的数据就算完成
若是y>x数据就丢失,这意味着udp根本不会粘包,但是会丢数据,不可靠

udp是无链接的,先启动哪一端都不会报错
udp发送数据,对端是不会返回确认信息的,因此不可靠

服务端:

from socket import *

server = socket(AF_INET, SOCK_DGRAM)  #创建一个服务器的套接字
server.bind((‘127.0.0.1‘, 8080))      #绑定服务器套接字

while True:
    data, client_addr = server.recvfrom(1024)
    server.sendto(data.upper(),client_addr)

server.close()

客户端:

from socket import *

client=socket(AF_INET,SOCK_DGRAM)

while True:
    msg=input(‘>>: ‘).strip()
    if not msg:continue
    client.sendto(msg.encode(‘utf-8‘),(‘127.0.0.1‘,8080))
    data,server_addr=client.recvfrom(1024)
    print(data.decode(‘utf-8‘))

client.close()

python Day9

标签:高效   启动   处理   ddr   bind   报错   客户   服务端   阻塞   

原文地址:http://blog.51cto.com/dzm911/2069063

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!