UDP基础server与client

1、基础功能

1、server端

import socket
sk = socket.socket(type=socket.SOCK_DGRAM)  # 建立一个socket对象,
# 指定以UDP协议的形式来连接
sk.bind(('127.0.0.1',8080))
# 指定服务的地址

msg,addr = sk.recvfrom(1024) # msg为接收到的消息,addr为发送端的地址
print(msg,addr)
sk.sendto(b'HELLO',addr)   # 给发送端回复消息,需携带 发送端的地址

sk.close()  # 关闭socket连接

2、clien端

import socket

sk = socket.socket(type=socket.SOCK_DGRAM)

sk.sendto(b'hello',('127.0.0.1',8080))   # 直接给服务器发送一段消息,需携带目的地址
msg,addr = sk.recvfrom(1024)   # 接收对面的回信
print(msg)
sk.close()

2、udp聊天小工具

1、客户端


import socket
ph = socket.socket(type=socket.SOCK_DGRAM)
ip_port = (("127.0.0.1",8089))

while 1:
    input_msg = input(">>>>>>:")
    ph.sendto(bytes(input_msg,encoding="utf-8"),ip_port)  #向服务端发消息,需携带自己的地址
    msg,adr = ph.recvfrom(1024)
    if msg.decode(encoding="utf-8") == "收到关闭命令,执行关闭连接操作":
        break
    print(msg.decode(encoding="utf-8"))

ph.close()

#注意:
input_msg = input(">>>>>>:")最好不要写在循环外面,应该写在循环里面紧靠发送消息时

2、服务端

import socket
ph = socket.socket(type=socket.SOCK_DGRAM)
ph.bind(("127.0.0.1",8089))

while 1:
    msg,adr = ph.recvfrom(1024) #接受的客户端的消息及地址
    if msg.decode(encoding="utf-8") == "q":
        ph.sendto(bytes("收到关闭命令,执行关闭连接操作",encoding="utf-8"), adr)
        break
    # print(msg,adr)
    print(msg.decode(encoding="utf-8"))
    input_msg = input(">>>>>>:")
    ph.sendto(input_msg.encode(encoding="utf-8"),adr)#向客户端发送消息,需携带客户端的地址
ph.close()

#注意:input_msg = input(">>>>>>:")最好不要写在循环外面,应该写在循环里面紧靠发送消息时

总结:

#UDP server 不需要建立连接,也不需要监听
#在启动服务之后只能被动的接收消息
#客户端发送消息的同时还会自带地址信息
#回复消息的时候,不仅需要发送消息,还需要发送对方的地址
原文地址:https://www.cnblogs.com/huoyunxieshen/p/10852437.html