码迷,mamicode.com
首页 > 其他好文 > 详细

udp协议

时间:2017-08-23 15:31:32      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:客户端   qq聊天   closed   recvfrom   最大   聊天   cli   encode   class   

基于UDP的套接字

udp是无链接的,先启动哪一端都不会报错

udp服务端

1 ss = socket()   #创建一个服务器的套接字
2 ss.bind()       #绑定服务器套接字
3 inf_loop:       #服务器无限循环
4     cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送)
5 ss.close()                         # 关闭服务器套接字

udp客户端

cs = socket()   # 创建客户套接字
comm_loop:      # 通讯循环
    cs.sendto()/cs.recvfrom()   # 对话(发送/接收)
cs.close()                      # 关闭客户套接字

qq聊天(由于udp无连接,所以可以同时多个客户端去跟服务端通信)

技术分享
import socket
ip_port=(127.0.0.1,8081)
udp_server_sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #买手机
udp_server_sock.bind(ip_port)

while True:
    qq_msg,addr=udp_server_sock.recvfrom(1024)
    print(来自[%s:%s]的一条消息:\033[1;44m%s\033[0m %(addr[0],addr[1],qq_msg.decode(utf-8)))
    back_msg=input(回复消息: ).strip()

    udp_server_sock.sendto(back_msg.encode(utf-8),addr)
服务端
技术分享
import socket
BUFSIZE=1024
udp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

qq_name_dic={
    狗哥alex:(127.0.0.1,8081),
    瞎驴:(127.0.0.1,8081),
    一棵树:(127.0.0.1,8081),
    武大郎:(127.0.0.1,8081),
}


while True:
    qq_name=input(请选择聊天对象: ).strip()
    while True:
        msg=input(请输入消息,回车发送: ).strip()
        if msg == quit:break
        if not msg or not qq_name or qq_name not in qq_name_dic:continue
        udp_client_socket.sendto(msg.encode(utf-8),qq_name_dic[qq_name])

        back_msg,addr=udp_client_socket.recvfrom(BUFSIZE)
        print(来自[%s:%s]的一条消息:\033[1;44m%s\033[0m %(addr[0],addr[1],back_msg.decode(utf-8)))

udp_client_socket.close()
服务端

基于udp的socket,在运行时永远不会发生粘包

udp最大接受长度512

udp协议

标签:客户端   qq聊天   closed   recvfrom   最大   聊天   cli   encode   class   

原文地址:http://www.cnblogs.com/pythonclass/p/7418345.html

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