UDP协议实现socket

UDP协议实现socket

UDP协议的特点

  • UDP是无链接的,先启动哪一端都不会报错(不可靠)
  • UDP协议是数据报协议,发空的时候也会自带报头,因此客户端输入空,服务端也能收到
  • 因为自带包头,所以不会出现粘包现象,但是多余的内容不会接收,所以会丢包。

UDP的使用

  • UPD协议一般不用于传输大数据。
  • UDP套接字虽然没有粘包问题,但是不能替代TCP套接字,因为UPD协议有一个缺陷:如果数据发送的途中,数据丢失,则数据就丢失了,而TCP协议则不会有这种缺陷,因此一般UPD套接字用户无关紧要的数据发送,例如qq聊天。

实现简单通信循环聊天

# server

import socket
# 指定连接协议为udp协议
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.bind(('127.0.0.1',8080))
# 绑定地址后即可首发数据,无需监听
while True:
    # recvfrom接收传来的信息和client端地址
    msg,addr = sk.recvfrom(1024)
    print(msg.decode('utf8'))
    info = input('>>>')
    info = '来自主机的消息:'+info
    # 发送数据的时候要带上addr
    sk.sendto(info.encode('utf8'),addr)
sk.close()

# client1
import socket
sk = socket.socket(type = socket.SOCK_DGRAM)
# 指定收发数据的server端地址
addr = ('127.0.0.1',8080)
while True:
    info = input('大哥:')
    info = '来自大哥的消息:' + info
    sk.sendto(info.encode('utf8'),addr)
    msg,addr = sk.recvfrom(1024)
    print(msg.decode('utf8'))
sk.close()

# client2
import socket
sk = socket.socket(type = socket.SOCK_DGRAM)
# 指定收发数据的server端地址
addr = ('127.0.0.1',8080)
while True:
    info = input('二哥:')
    info = '来自二哥的消息:' + info
    sk.sendto(info.encode('utf8'),addr)
    msg,addr = sk.recvfrom(1024)
    print(msg.decode('utf8'))
sk.close()
posted @ 2019-09-10 09:03  SweetJack  阅读(507)  评论(0编辑  收藏  举报