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

基于UDP的套接字

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

【1】方法简介

(1)UDP服务端

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

(2)UDP客户端

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

【2】示例模版

  • client
import socket

# 创建链接对象
client = socket.socket(type=socket.SOCK_DGRAM)

IP = '127.0.0.1'
PORT = 9696

# 发送数据
msg = '我是客户端'
msg = msg.encode('utf8')
client.sendto(msg, (IP, PORT))

# 接收数据
msg, addr = client.recvfrom(1024)
print(msg.decode('utf8'))
print(addr)
  • server
import socket

# 创建服务端对象
server = socket.socket(type=socket.SOCK_DGRAM)

# 监听IP和PORT
IP = '127.0.0.1'
PORT = 9696
server.bind((IP, PORT))

# 接收信息
msg, addr = server.recvfrom(1024)
print(msg.decode('utf8'))
print(addr)

# 发送信息
data = '我是服务端'
data = data.encode('utf8')
server.sendto(data, addr)

空数据的处理

  • TCP协议是水流式协议:传入的数据不能为空,因为水是一直流的,在传输过程中不会对数据进行操作
  • UDP协议是数据报协议:传入的数据可为空,在传输过程中UDP会对数据进行内部的拼接和处理

断开链接的影响

  • TCP协议是水流式协议:在建立链接过程中,服务端和客户端的链接是一直存在的,断开一方都会对另一方造成影响
  • UDP协议是数据报协议:在建立链接过程中,是通过解析对方数据中的ip和端口,再向另一方返回数据的,所以一方发生问题并不会影响到另一方
posted @ 2024-01-16 21:00  Xiao0101  阅读(56)  评论(0)    收藏  举报