创建UDP连接

创建UDP连接

在 socket 对象中,使用方法 recvfrom() 接收数据。具体语法格式如下:

recvfrom(bufsize[,flags]) #bufsize用于指定缓冲区大小

方法 recvfrom() 主要用来从 socket 接收数据,可以连接 UDP。

在 socket 对象中,使用方法 sendto() 发送数据。具体语法格式如下:

sendto (bytes, address)

参数“bytes”表示要发送的数据;参数“address”表示发送信息的目标地址。由目标IP地址和端口构成的元组,主要用来通过 UDP 将数据发送到指定的服务器端。

服务端

在 Python 程序中,UDP 服务器不需要 TCP 服务器那么多的设置,因为它们不是面向连接的。除等待传入的连接之外,几乎不需要做其他工作。

下面是一段通用的 UDP 服务器端代码。

ss = socket() #创建服务器套接字
ss.bind() #绑定服务器套接字
infloop: #服务器无限循环
    cs = ss.recvfrom()/ss.sendto() #实现对话操作(接收/发送)
ss.close() #关闭服务器套接字

从上述演示代码中可以知道,除创建套接字并将它绑定到本地地址(主机名/端口号对)之外,并没有额外的工作。无限循环包含接收客户端消息、打上时间戳并返回消息,然后回到等待另一条消息的状态。注意,close() 调用是可选的,并且由于无限循环的缘故,它并不会被调用,但它应该是优雅或智能退出方案的一部分。

下面的实例代码中演示了使用套接字建立 UDP“客户端/服务器端”连接的过程,UDP 是一个不可靠的、相互通信的“客户端/服务器端”。

实例文件 serudp.py 的功能是使用 UDP 连接方式建立一个服务器端程序,将收到的信息直接发回客户端。文件 serudp.py 的具体实现代码如下:

import socket #导入socket模块
HOST = '' #定义变量HOST的初始值
PORT = 10000  #定义变量PORT的初始值
#创建socket对象s,参数分别表示地址和协议类型
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((HOST, PORT)) #将套接字与地址绑定
data = True #设置变量data的初始值
while data: #如果有数据
    data,address = s.recvfrom(1024) #实现对话操作(接收/发送)
    if data==b'zaijian': #当接收的数据是zaijian时
        break #停止循环
    print('接收信息:',data.decode('utf-8')) #显示接收到的信息
    s.sendto(data,address) #发送信息
s.close() #关闭连接

在上述实例代码中,建立 UDP 连接之后,使用 while 语句多次与客户端进行数据交换。上述服务器程序建立在本机的 10000 端口上,当收到“zaijian”信息时退出 while 循环,关闭服务器。

客户端

import socket #导入socket模块
HOST = 'localhost' #定义变量HOST的初始值
PORT = 10000 #定义变量PORT的初始值
#创建socket对象s,参数分别表示地址和协议类型
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
data = "你好!" #定义变量data的初始值
while data: #如果有data数据
    s.sendto(data.encode('utf-8'),(HOST,PORT)) #发送数据信息
    if data=='zaijian': #如果data的值是'zaijian'
        break #停止循环
    data,addr = s.recvfrom(512) #读取数据信息
    print("从服务器接收信息:\n",data.decode('utf-8')) #显示从服务器端接收的信息
    data = input('输入信息:\n') #信息输入
s.close() #关闭连接

上述代码使用套接字以 UDP 连接方式建立了一个简单的客户端程序,当在客户端创建套接字后,会直接向服务器端(本机的 10000 端口)发送数据,而没有进行连接。当用户键入“zaijian”时退出 while 循环,关闭本程序。运行效果与 TCP 服务器端和客户端实例基本相同。

本文作者:春游去动物园

本文链接:https://www.cnblogs.com/chunyouqudongwuyuan/p/16843449.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   春游去动物园  阅读(359)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开
  1. 1 生分 川青
生分 - 川青
00:00 / 00:00
An audio error has occurred.

生分 - 川青

词:莎子

曲:邵翼天

编曲:林亦

混音:罗杨轩

吉他:林亦

制作人:谢宇伦

监制:曾炜超/陈显

策划:+7

统筹:黄染染

出品:漫吞吞文化

『酷狗音乐人 • 星曜计划』

全方位推广,见证星力量!

「版权所有未经许可 不得商业翻唱或使用」

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡

有些话一开口会伤人

有些话一开口会伤人

所以我选择默不作声

所以我选择默不作声

爱一个人

若甘愿陪衬

甘愿牺牲

也许换个名分

也不是没可能

我不怕在爱里做个蠢人

我不怕在爱里做个蠢人

也不怕爱过之后再分

也不怕爱过之后再分

爱一个人

有万种身份

万种可能

只是没想到

我们最后友人相称

我们怎么变得那么生分

我们怎么变得那么生分

连说话都要掌握好分寸

怕不注意流言

见缝插针

怕不小心我们

成陌生人

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡

有些话一开口会伤人

有些话一开口会伤人

所以我选择默不作声

所以我选择默不作声

爱一个人

若甘愿陪衬

甘愿牺牲

也许换个名分

也不是没可能

我不怕在爱里做个蠢人

我不怕在爱里做个蠢人

也不怕爱过之后再分

也不怕爱过之后再分

爱一个人

有万种身份

万种可能

只是没想到我们最后

友人相称

我们怎么变得那么生分

连说话都要掌握好分寸

怕不注意流言见缝插针

怕不小心我们成陌生人

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡

我们怎么变得那么生分

我们怎么变得那么生分

连说话都要掌握好分寸

怕不注意流言见缝插针

怕不小心我们成陌生人

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡