执行UDP连接的方式与TCP大致相同,不同之处在于客户端和服务器端之间不建立“连接”:

1.创建UDP服务器

 

# filename:udpServer.py

from socket import *
from time import ctime

HOST = ''                          # HOST为空与INADDR_ANY含义相同,表示任何地址
PORT = 21567                       # 端口号21567
BUFSIZE = 1024                     # 缓冲区的大小为1K

ADDR = (HOST, PORT)                # 地址元组

# 创建服务器端套接字
udpSerSock = socket(AF_INET, SOCK_DGRAM)
# 将套接字与地址绑定
udpSerSock.bind(ADDR)

# 服务器进入无限循环
while True:
    print('waiting for message...')
    # 接收来自客户端的数据,返回数据和地址元组
    re_data, addr = udpSerSock.recvfrom(BUFSIZE)
    print('...receieved from and returned to:', addr)
    # 发送数据给客户端,内容:[时间]接受的信息
    # bytes.decode()对接收的内容进行解码
    se_data = ['[', str(ctime()), ']', str(re_data.decode())]
    # str.encode()对发送内容进行编码
    udpSerSock.sendto((''.join(se_data)).encode(), addr)

# 关闭服务器端套接字
udpSerSock.close()

2.创建UDP客户端

# filename:udpClient.py

from socket import *

HOST = 'localhost'                  # HOST为localhost表示本机,可以换成其他表示服务器端的地址或者域名
PORT = 21567                        # 端口号21567
BUFSIZE = 1024                      # 缓冲区的大小为1K

ADDR = (HOST, PORT)                 # 地址元组

# 创建客户端套接字
udpCliSock = socket(AF_INET, SOCK_DGRAM)

# 通信循环
while True:
    # 提示用户输入
    se_data = input('> ')
    if not se_data:
        break
    # 向服务器端发送数据
    # str.encode()对发送内容进行编码
    udpCliSock.sendto(se_data.encode(), ADDR)

    # 接收来自服务器端的数据
    re_data, addr = udpCliSock.recvfrom(BUFSIZE)
    if not re_data:
        break
    # bytes.decode()对接收的内容进行解码
    print(re_data.decode())

# 关闭客户端套接字
udpCliSock.close() 

3.运行

 

 

posted on 2013-04-24 22:14  101010  阅读(393)  评论(0编辑  收藏  举报