Internet Printing Protocol/1.1: Encoding and Transport 前三章翻译

1 引言

本文档包含IPP编码操作规则及传输层和操作层的描述。传输层由HTTP/1.1请求或响应组成。HTTP/1.1RFC2616RFC2616】描述。本文档定义了IPP实现支持的HTTP

操作层包括一个HTTP请求或响应中的消息主体。该文件“Internet打印协议/1.1:模型和语义”【RFC2911】定义了一个消息主体的语义和支持的值。该文件定义了IPP操作的编码。上述文件【RFC2911】此后称为“IPP模型文档”或简称“模型文档”。

注意:IPP1.1)和HTTP1.1)的版本号没有联系,它们版本号只是恰好都是1.1

2 一致性术语

关键词"MUST""MUST NOT""REQUIRED""SHOULD""SHOULD NOT""RECOMMENDED""MAY""OPTIONAL"在文档RFC2119RFC2119】中定义。

3 操作层编码

操作层是HTTP请求或者响应的消息主体的一部分,它必须包含一个单一的IPP操作请求或者操作响应。每个请求或响应由一个序列的值和属性组组成。属性组由一系列的属性组成,每一个属性包含名称和值。名称和值是最终的字节序列。

该编码由八位字节作为最原始的类型。有很多类型的八位字节编码,其中三种极为重要:整数,字符串,字节串,其它类型的编码都是基于它们。此编码中的每个字符串必须是这样一种字符序列,字符序列中的字符应该与一些字符集和自然语言相关联。字符串必须和值中的第一个字符(根据阅读顺序)放在编码的第一个字符位置。字符串符合美式英语的US-ASCII编码,称为US-ASCII-STRING。字符串相关联的字符集和自然语言在一个请求或响应中被指定,以后称为LOCALIZED-STRING。在“IPP模式文档顺序的字符串必须和值中的第一个字节(根据IPP模式文档顺序)变成编码中的第一个字节。在编码中的每一个整数符号必须被编码为用大端格式二进制补码表示的有符号整数。根据使用中的协议,八字节的整数的数量必须是12,或4。这样一个字节的整数此后称为SIGNED-BYTE,被使用于版本号和标签领域。两个字节的整数,此后称为SIGNED-SHORT,用于操作ID,状态码和长度。四字节的整数此后称为SIGNED-INTEGER,用于值字段和请求ID

后续两节以两种方式表示了操作层的编码:

    -形式化地通过图形和描述

    -形式化地通过增强的巴克斯-瑙尔范式(ABNF),(RFC2234RFC2234文档定义了ABNF

    一个操作的请求或响应必须使用后续两节所描述的方式进行编码。

3.1编码的图形表示

3.1.1请求和响应

操作请求或响应应如下编码:

-------------------------------------------------

|            版本号              |  要求2个字节

-------------------------------------------------

|        操作ID(请

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VC mfc单文档中代码如下void CMyView::OnDraw(CDC* pDC) { CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); for (int i=0;i<points.size();i++){ color=RGB(rand()%6,rand()%6,rand()%6); r=rand()F+5; br.CreateSolidBrush(color); pDC->SelectObject(&br); pDC->Ellipse(points[i].x-r,points[i].y-r,points[i].x+r,points[i].y+r); br.DeleteObject(); } // TODO: add draw code for native data here } ///////////////////////////////////////////////////////////////////////////// // CMyView printing BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CMyView::OnBeginPrinting(CDC* /pDC/, CPrintInfo* /pInfo/) { // TODO: add extra initialization before printing } void CMyView::OnEndPrinting(CDC* /pDC/, CPrintInfo* /pInfo/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // CMyView diagnostics #ifdef _DEBUG void CMyView::AssertValid() const { CView::AssertValid(); } void CMyView::Dump(CDumpContext& dc) const { CView::Dump(dc); } CMyDoc* CMyView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc))); return (CMyDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CMyView message handlers void CMyView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default center=point; r=rand()F+5;//r=5~50 color=RGB(rand()%6,rand()%6,rand()%6); points.push_back(center); SetTimer(1,200,NULL); CView::OnLButtonDown(nFlags, point); } void CMyView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CView::OnLButtonUp(nFlags, point); } void CMyView::rise() { for(int i=0;i<points.size();i++) { points[i].y-=5; if(points[i].y<-r) { points.erase(points.begin()+i); i--; } } } void CMyView::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default if(nIDEvent==1){ RedrawWindow(); rise(); } CView::OnTimer(nIDEvent); },怎么修改此代码能实现每次单击鼠标出现的圆大小和颜色随机,但在圆的上升过程中大小和颜色都为刚开始单击鼠标时的大小和颜色,不会不停的变换。并且前面单击鼠标出现的圆的颜色和大小不会随着后面单击鼠标出现的圆的颜色和大小改变而改变。给出完整步骤及代码
05-29

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值