import argparse,socket
from datetime import datetime MAX_BYTES = 65535 def server(port):
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #协议族AF_INET以及数据报类型SOCK_DGRAM.SOCK_DGRAM表示在IP网络上使用UDP协议
#要注意的是数据报datagram而不是数据包packet,用了表示应用层数据块传输的官方术语
sock.bind(('127.0.0.1',port)) #绑定一个UDP网络地址:一个二元组,包含一个IP地址和一个整形的UDP端口号
#端口号要大于1023,否则要管理员权限
print('Listening at {}'.format(sock.getsockname())) #查询套接字当前绑定的IP地址和端口号
while True: #会进入一个循环不断运行recvfromO
data,adress = sock.recvfrom(MAX_BYTES) #最长可接收65535字节的信息,也是UDP数据报可包含的最大长度,没有接收到永远等待
#一旦接收到数据报,返回两个值。1 发送该数据报的客户端地址 2 以字节表示数据报的内容
text = data.decode('ascii')
print('The client at {} says {!r}'.format(adress,text))
text = 'Your data was {} bytes long'.format(len(data))
data = text.encode('ascii')
sock.sendto(data,adress) def client(port):
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
text = 'The time is {}'.format(datetime.now())
data = text.encode('ascii')
sock.sendto(data,('127.0.0.1',port)) #两个信息:要发送的信息和目标地址。这是向服务器发送数据报的唯一调用
print('The OS assigned me the adress {}'.format(sock.getsockname()))
data,adress = sock.recvfrom(MAX_BYTES)
text = data.decode('asicc')
print('The serve {} replied {!r}'.format(adress,text))
if __name__ == '__main__':
choices = {'client':client,'server':server}
parser = argparse.ArgmentParser(description='Send and receive UDP locally')
parser.add_argument('role',choices = choices ,help = 'which role to play')
parser.add_argument('-p',metavar = 'PORT',type = int ,default = 1060,
help = 'UDP port (default 1060)')
args = parser.parse_args()
function = choices[args.role]
function(args.p)

使用自环接口的UDP服务器和客户端的更多相关文章

  1. Linux系统编程(37)—— socket编程之UDP服务器与客户端

    典型的UDP客户端/服务器通讯过程: 编写UDP Client程序的步骤 1.初始化sockaddr_in结构的变量,并赋值.这里使用"8888"作为连接的服务程序的端口,从命令行 ...

  2. node.js中通过dgram数据报模块创建UDP服务器和客户端

    node.js中 dgram 模块提供了udp数据包的socket实现,可以方便的创建udp服务器和客户端. 一.创建UDP服务器和客户端 服务端: const dgram = require('dg ...

  3. Python 绝技 —— UDP 服务器与客户端

    i春秋作家:wasrehpic 0x00 前言 在上一篇文章「Python 绝技 —— TCP 服务器与客户端」中,介绍了传输层的核心协议 TCP ,并运用 Python 脚本的 socket 模块演 ...

  4. windows下UDP服务器和客户端的实现

      UDP是面向非连接的协议,因此在实现UDP服务器时,服务器不用总是处于监听状态.可以直接收发数据.   服务器端   1.初始化 WASStartup ( ... )   2.创建Socket s ...

  5. 【卷二】网络三—UDP服务器与客户端

    这是另一个类型的服务器/客户端,无连接的 UDP: (User Datagram Protocol) 用户数据报协议 参考: P58~P60 UDP 时间戳服务器 [时间戳 就是ctime()显示的内 ...

  6. nodejs 创建tcp/udp服务器和客户端

    TCP server // https://nodejs.org/api/net.html const net = require("net"); // https://nodej ...

  7. RawCap抓取本地回环接口数据包

    RawCap.exe --help ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 D: ...

  8. 为什么不能将客户端的连接请求跳转或转发到本机lo回环接口上?

    一.为什么不能将本机的请求跳转/转发到回环接口上? 如上图一样,服务器对外只开放了一个80端口,但是web服务监听在了lo 接口上8080端口上,现在要实现外网通过访问服务器的80端口,来提供web服 ...

  9. [转载]Linux中的网络接口及LO回环接口

    转自:https://blog.csdn.net/weixin_39863747/article/details/80564358 Linux中的网络接口及LO回环接口 2018年06月04日 10: ...

随机推荐

  1. MicroPython TPYBoard v702实现HTTP应用功能

    [Micropython]TPYBoard v702 HTTP应用功能 转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:Micro ...

  2. 【转】C#中base关键字的几种用法:base()

    转:https://blog.csdn.net/cplvfx/article/details/82982862 base其实最大的使用地方在面相对象开发的多态性上,base可以完成创建派生类实例时调用 ...

  3. 关于Mach-O类型文件那点事

    Mach-O文件简介   Mach-O是一种文件格式,是Mach Object文件格式的缩写. 它通常应用于可执行文件,目标代码,动态库,内核转储等中.   Mach-O作为大部分基于Mach核心的操 ...

  4. 2018 Multi-University Training Contest 10

      Recently, TeaTree acquire new knoledge gcd (Greatest Common Divisor), now she want to test you. As ...

  5. Mysql的binlog日志与mysqlbinlog命令

    binlog相关 MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句select.show等),以事件形式记录,还包 ...

  6. 全网最详细!Centos7.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台

    背景 日常工作中,经常会用到Jmeter去压测,毕竟LR还要钱(@¥&*...),而最常用的接口压力测试,我们都是通过聚合报告去查看压测结果的,然鹅聚合报告的真的是丑到家了,作为程序猿这当然不 ...

  7. 创建django报错使用miniconda

    sqlite文件缺失 下载地址 https://sqlite.org/download.html https://blog.csdn.net/xuzhexing/article/details/905 ...

  8. Qt Installer Framework翻译(3-1)

    初始化安装 下图说明了安装应用程序的默认工作流程: 本节使用在macOS上运行的Your Application Installer示例来说明默认工作流程.安装程序具有本地化外观,并可感知每个受支持的 ...

  9. Java入门 - 语言基础 - 14.String类

    原文地址:http://www.work100.net/training/java-string.html 更多教程:光束云 - 免费课程 String类 序号 文内章节 视频 1 概述 2 创建字符 ...

  10. Qt Installer Framework翻译(5-3)

    推广更新 创建在线安装程序,以便能够向安装产品的用户推广更新. 为了推广更新,需要执行以下步骤: 将待更新内容复制到package文件夹. 在package.xml文件中增加待更新组件的元素的值. 使 ...