网络编程-06基于UDP协议的socket套接字编程

一丶什么是UDP

  • UDP是无连接的,先启动哪一端都不会报错
  • UDP协议是数据报协议,发空的时候也会自带报头,所以客户端输入空,服务端也能收到
  • UPD协议通常不用于传输大数据。
  • UDP套接字虽然没有粘包问题,可是不能替代TCP套接字,由于UPD协议有一个缺陷:若是数据发送的途中,数据丢失,则数据就丢失了,而TCP协议则不会有这种缺陷,所以通常UPD套接字用户可有可无的数据发送,例如qq聊天。

1.1服务端python

import socket

server = socket.socket(type=socket.SOCK_DGRAM)  # UDP协议
server.bind(('127.0.0.1',8080))
# UDP不须要设置半链接池 它也没有半链接池的概念

# 由于没有双向通道  不须要accept  直接就是通讯循环
while True:
    data, addr = server.recvfrom(1024)
    print('数据:',data)  # 客户端发来的消息
    print('地址:',addr)  # 客户端的地址
    server.sendto(data.upper(),addr)

1.2客户端socket

import socket

client = socket.socket(type=socket.SOCK_DGRAM)
# 不须要创建链接  直接进入通讯循环
server_address = ('127.0.0.1',8080)
while True:
    client.sendto(b'hello',server_address)
    data, addr = client.recvfrom(1024)
    print('服务端发来的数据',data)
    print('服务端的地址',addr)

二丶UDP实现简易QQ

2.1服务端大数据

import socket


server = socket.socket(type=socket.SOCK_DGRAM)  # UDP协议
server.bind(('127.0.0.1',8080))
# UDP不须要设置半链接池 它也没有半链接池的概念

# 由于没有双向通道  不须要accept  直接就是通讯循环
while True:
    data, addr = server.recvfrom(1024)
    print('数据:',data)  # 客户端发来的消息
    print('地址:',addr)  # 客户端的地址
    server.sendto(data.upper(),addr)

2.2客户端code

import socket


client = socket.socket(type=socket.SOCK_DGRAM)
server_address = ('127.0.0.1',8080)

while True:
    msg = input('>>>:')
    msg = '来自客户端5的消息:%s'%msg
    client.sendto(msg.encode('utf-8'),server_address)
    data, server_addr = client.recvfrom(1024)
    print(data.decode('utf-8'))
相关文章
相关标签/搜索