Jabber学习笔记 之二

jabber服务器搭建 经过几次努力,我终于在我的ubuntu上成功搭建起了jabber即时通讯服务器。由于是源码编译的所以没有放到ubuntu分类下。由于依赖于openssl和mysql,所以安装之前要把这两个准备好(如果configure的时候提示找不到mysql的文件那可能是你的mysql没有安装dev包)现将大致步骤介绍如下(本文只研究在局域网内架设服务器,互联网上可能需要改动一些地方:): 1、首先到ht 阅读详情
三、Jabber核心协议(XMPP Core :RFC3920)
1、 /XML Stanza XML Stream
Stream :以 <stream> 开始,至 </stream> 结束,在整个生命周期中,可以包含任意数量的 XML 元素
Stanza Stream 中结构化的 XML 片断
整个流看起来大致如下:
|--------------------|
| <stream>           |
|--------------------|
| <presence>         |
|   <show/>          |
| </presence>        |
|--------------------|

| <message to='foo'> |
|   <body/>          |
| </message>         |
|--------------------|

| <iq to='bar'>      |

|   <query/>         |

| </iq>              |
|--------------------|

| ...                |
|--------------------|

| </stream>          |
|--------------------|
 
 
2、 Stream Attributes
to :用于发起方stream 中( initial stream),表明接收者,响应Stream不能包含to,如果有则被忽略;
from :用于响应Stream中( response stream),表明接收者,发起方Stream不能包含from,如果有则被忽略;
id :用于响应 Stream 中,唯一性标识,出于安全性考虑,建议随机生成;
xml:lang :缺省语言
version :版本号,通常为 1.0
 
3、 Stream Error:
当遇到有stream级别的错误时,需要发送一个<error/>tag,具体语法如下:
<stream:error>
 <defined-condition xmlns='urn:ietf:params:xml:ns:xmpp-streams'/>

 <text xmlns='urn:ietf:params:xml:ns:xmpp-streams'

        xml:lang='langcode'>
    OPTIONAL descriptive text

 </text>

 [OPTIONAL application-specific condition element]
</stream:error>
 
defined-condition举例: <xml-not-well-formed/> <not-authorized/> <bad-format/> <host-unknown/>
 
当一个Stream被发起以后,需要通过TLS来保证连接的安全性,下面是一个从客户端到服务器的例子。
Step 1: Client initiates stream to server:
<stream:stream
    xmlns='jabber:client'

    xmlns:stream='http://etherx.jabber.org/streams'
    to='example.com'
    version='1.0'>
Step 2: Server responds by sending a stream tag to client:
<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    id='c2s_123'
    from='example.com'
    version='1.0'>
Step 3: Server sends the STARTTLS extension to client along with authentication mechanisms and any other stream features:
<stream:features>
 <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'>
    <required/>
 </starttls>

 <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
    <mechanism>DIGEST-MD5</mechanism>

    <mechanism>PLAIN</mechanism>

 </mechanisms>
</stream:features>
Step 4: Client sends the STARTTLS command to server:
<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
Step 5: Server informs client that it is allowed to proceed:
<proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
Step 5 (alt): Server informs client that TLS negotiation has failed and closes both stream and TCP connection:
<failure xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
</stream:stream>
Step 6: Client and server attempt to complete TLS negotiation over the existing TCP connection.
Step 7: If TLS negotiation is successful, client initiates a new stream to server:
<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    to='example.com'
    version='1.0'>
Step 7 (alt): If TLS negotiation is unsuccessful, server closes TCP connection.
Step 8: Server responds by sending a stream header to client along with any available stream features:
<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'

    from='example.com'

    id='c2s_234'
    version='1.0'>
<stream:features>

 <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
    <mechanism>DIGEST-MD5</mechanism>
    <mechanism>PLAIN</mechanism>
    <mechanism>EXTERNAL</mechanism>
 </mechanisms>
</stream:features>
Step 9: Client continues with SASL negotiation (Use of SASL) .
 
5、 Simple Authentication and Security Layer (SASL) protocol
TLS 之后是用户的安全认证,采用 SASL 协议,下面是一个从 client server 的例子:
   Step 1: Client initiates stream to server:
<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    to='example.com'
    version='1.0'>
Step 2: Server responds with a stream tag sent to client:
<stream:stream
    xmlns='jabber:client'

    xmlns:stream='http://etherx.jabber.org/streams'
    id='c2s_234'

    from='example.com'
    version='1.0'>
Step 3: Server informs client of available authentication mechanisms:
<stream:features>
 <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>

    <mechanism>DIGEST-MD5</mechanism>
    <mechanism>PLAIN</mechanism>

 </mechanisms>
</stream:features>
Step 4: Client selects an authentication mechanism:
<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'
      mechanism='DIGEST-MD5'/>
Step 5: Server sends a [BASE64] (Josefsson, S., “The Base16, Base32, and Base64 Data Encodings,” July 2003.) encoded challenge to client:
<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'> cmVhbG09InNvbWVyZWFsbSIsbm9uY2U9Ik9BNk1HOXRFUUdtMmhoIixxb3A9ImF1dGgi LGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNzCg==
</challenge>
The decoded challenge is:
realm="somerealm",nonce="OA6MG9tEQGm2hh",/
qop="auth",charset=utf-8,algorithm=md5-sess
Step 5 (alt): Server returns error to client:
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
 <incorrect-encoding/>

</failure>
</stream:stream>
Step 6: Client sends a [BASE64] (Josefsson, S., “The Base16, Base32, and Base64 Data Encodings,” July 2003.) encoded response to the challenge:
<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'> dXNlcm5hbWU9InNvbWVub2RlIixyZWFsbT0ic29tZXJlYWxtIixub25jZT0i T0E2TUc5dEVRR20yaGgiLGNub25jZT0iT0E2TUhYaDZWcVRyUmsiLG5jPTAw MDAwMDAxLHFvcD1hdXRoLGRpZ2VzdC11cmk9InhtcHAvZXhhbXBsZS5jb20i LHJlc3BvbnNlPWQzODhkYWQ5MGQ0YmJkNzYwYTE1MjMyMWYyMTQzYWY3LGNo
YXJzZXQ9dXRmLTgK
</response>
The decoded response is:
username="somenode",realm="somerealm",/
nonce="OA6MG9tEQGm2hh",cnonce="OA6MHXh6VqTrRk",/
nc=00000001,qop=auth,digest-uri="xmpp/example.com",/ response=d388dad90d4bbd760a152321f2143af7,charset=utf-8
Step 7: Server sends another [BASE64] (Josefsson, S., “The Base16, Base32, and Base64 Data Encodings,” July 2003.) encoded challenge to client:
<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'> cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZAo=
</challenge>
The decoded challenge is:
rspauth=ea40f60335c427b5527b84dbabcdfffd
Step 7 (alt): Server returns error to client:
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
 <temporary-auth-failure/>
</failure>

</stream:stream>
Step 8: Client responds to the challenge:
<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
Step 9: Server informs client of successful authentication:
<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
Step 9 (alt): Server informs client of failed authentication:
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
 <temporary-auth-failure/>
</failure>

</stream:stream>
Step 10: Client initiates a new stream to server:
<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    to='example.com'

    version='1.0'>
Step 11: Server responds by sending a stream header to client along with any additional features (or an empty features element):
<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    id='c2s_345'
    from='example.com'
    version='1.0'>

<stream:features>

 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>

 <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>

</stream:features>
 
6、  Resource Binding
SASL之后便是Resource Binding,但这个只是client到server时需要,而server与server之间不需要。
    Server advertises resource binding feature to client:
<stream:stream
    xmlns='jabber:client'

    xmlns:stream='http://etherx.jabber.org/streams'

    id='c2s_345'

    from='example.com'
    version='1.0'>
<stream:features>

 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>

</stream:features>
If the client wishes to allow the server to generate the resource identifier on its behalf, it sends an IQ stanza of type "set" that contains an empty <bind/> element:
Client asks server to bind a resource:
<iq type='set' id='bind_1'>
 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>

</iq>
A server that supports resource binding MUST be able to generate a resource identifier on behalf of a client. A resource identifier generated by the server MUST be unique for that <node@domain>.
If the client wishes to specify the resource identifier, it sends an IQ stanza of type "set" that contains the desired resource identifier as the XML character data of a <resource/> element that is a child of the <bind/> element:
Client binds a resource:
<iq type='set' id='bind_2'>
 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>

    <resource>someresource</resource>
 </bind>

</iq>
Once the server has generated a resource identifier for the client or accepted the resource identifier provided by the client, it MUST return an IQ stanza of type "result" to the client, which MUST include a <jid/> child element that specifies the full JID for the connected resource as determined by the server:
Server informs client of successful resource binding:
<iq type='result' id='bind_2'>
 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>

    <jid>somenode@example.com/someresource</jid>
 </bind>

</iq>
A server SHOULD accept the resource identifier provided by the client, but MAY override it with a resource identifier that the server generates; in this case, the server SHOULD NOT return a stanza error (e.g., <forbidden/>) to the client but instead SHOULD communicate the generated resource identifier to the client in the IQ result as shown above.
When a client supplies a resource identifier, the following stanza error conditions are possible (see Stanza Errors (Stanza Errors)):
·         The provided resource identifier cannot be processed by the server in accordance with Resourceprep (Resourceprep).
·         The client is not allowed to bind a resource to the stream (e.g., because the node or user has reached a limit on the number of connected resources allowed).
·         The provided resource identifier is already in use but the server does not allow binding of multiple connected resources with the same identifier.
The protocol for these error conditions is shown below.
Resource identifier cannot be processed:
<iq type='error' id='bind_2'>
 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>

    <resource>someresource</resource> 
</bind>

 <error type='modify'>
    <bad-request xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
 </error>
</iq>
Client is not allowed to bind a resource:
<iq type='error' id='bind_2'>
 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>
    <resource>someresource</resource>
 </bind>

 <error type='cancel'>

    <not-allowed xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>

 </error>

</iq>
Resource identifier is in use:
<iq type='error' id='bind_2'>
 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>

    <resource>someresource</resource>
 </bind>

 <error type='cancel'>

    <conflict xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
 </error>
</iq>
If, before completing the resource binding step, the client attempts to send an XML stanza other than an IQ stanza with a <bind/> child qualified by the 'urn:ietf:params:xml:ns:xmpp-bind' namespace, the server MUST NOT process the stanza and SHOULD return a <not-authorized/> stanza error to the client.
 
7、  XML Stanzas
'jabber:client' 'jabber:server' 命名空间定义了三种 stanza:<message/> <presence/> <iq/>.
       详细定义需要学习RFC3921。
8、  实验
分别选择两个Jabber Server做连接测试:
第一个:jabber.org
telnet jabber.org 5222
<?xml version='1.0'?>
<stream:stream
       to='jabber.org'
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       version='1.0'>
收到如下内容:
<?xml version='1.0'?>
<stream:stream
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       id='94769953'
       from='jabber.org'
       version='1.0'
       xml:lang='en'>
      
       <stream:features>
              <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
              <compression xmlns='http://jabber.org/features/compress'>
                     <method>zlib</method>
              </compression>                  
              <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
                     <mechanism>DIGEST-MD5</mechanism>
                     <mechanism>PLAIN</mechanism>
              </mechanisms>
              <register xmlns='http://jabber.org/features/iq-register'/>
       </stream:features>
从返回的内容来看,基本上跟RFC3720所说一致,不过多了一个压缩?,接下来就没法进行了,看来还得研究一下压缩算法
 
第二个:talk.google.com,这个就是大名鼎鼎的Google Talk了,由于也是采用XMPP,因此也可能连接:
telnet talk.google.com 5222
<?xml version='1.0'?>
<stream:stream
       to='google.com'
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       version='1.0'>
收到内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<stream:stream from="google.com"
       id="8F2DEA3E08EDD09C"
       version="1.0"
       xmlns:stream="http://etherx.jabber.org/streams"
       xmlns="jabber:client">
       <stream:features>
              <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
              <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
                     <mechanism>X-GOOGLE-TOKEN</mechanism>
              </mechanisms>
       </stream:features>
google talk倒是没采用压缩算法,不过居然是自己专用的SASL。
接下来发送:
<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
收到:
<proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
TLS还是能够顺利进行的,接下来的就没法进行了。可以看出跟Google Talk通信是可行的,只不过需要熟悉Google Talk的扩展协议,目前暂时还没有收集这方面的资料。
转自: http://blog.csdn.net/zzyy00/archive/2006/12/22/1453498.aspx
jabber技术概况 Jabber 技  术  概  况Jabber即时通信系统服务整体框架的概述1、Jabber技术概述       本文档包括以下内容:?           Introduction 简介?           Foundations 基本知识?           High-Level Server Architecture高阶服务体系?           Basi 阅读详情

相关推荐

Jabber Frame(超时传输帧)

Jabber超时传输帧

网始如芯个人博客 4308

jabberd协议概述

为什么80%的码农都做不了架构师?>>> ...

weixin_33883178的博客 599

【GAMES201学习笔记】物质点法入门

《GAMES201》 学习笔记

捕鱼维的个人小站 9155

Jabber 注册一个新用户的流程(JabberD + gloox)

从网络实际发送,接收到的包来分析Jabber协议中注册一个新用户的过程例子服务器所用的是 JabberD2 S7版 客户端是 gloox 0.8版的注册测试程序用其它的服务器和客户端,可能会有所不同,但大体上应该是一样的C->S 001xmlns=jabber:clientxmlns:stream=http://etherx.jabber.org/streams xml:lang=en

迅影 9770

Jabber 客户端 解析

Jabber客户端现在网络中最流行的程序,莫过于即时通讯软件了,从ICQ到QQ,全世界约有7000万人每天在使用它们。人们利用它来沟通、交流,它是继电子邮件之后另一个最成功的通讯工具。如此成功的软件模式引出了一系列出色产品的诞生:ICQ,Yahoo! Messenger, AOL Instant Messenger,MSN Instant Messenger及中国人用的最多的QQ,而其中有一个

zhangmoon的专栏 3532

XMPP之Stream节点属性

版权所有,转载请注明出处:http://guangboo.org/2013/03/06/xmpp-stream-attributes 前面的文章介绍了XMPP通讯的过程,包括流的打开和关闭,特性协商,消息交换等,并在最后简单说明了stream节点的属性,由于stream节点是在XMPP通讯中初始化的节点,也是第一个发送出去的XML节点,因此我们这里以Stream节点为例,介绍一下该节点下的主要属...

编程语言小筑 391

Jabber学习笔记 之一

一、  核心概念Jabber 1、 DomainJabber领域由大到小可以分为以下几个实体:network:由多个相互交换信息Jabber Domain组成domain:Jabber domain必需是一个有效的Internet域名,它提供本地控制,并可以与域名外的用户通信。server:管理domain的逻辑实体user:逻辑上的信息传输终节点,传输的数据包通常是指

zzyy00的专栏 3606

Jabber学习笔记 之三

四、 XMPP-IM (RFC3921) 1、XML Stanza语法1.1 Message语法:类型:通过属性type指定,可用类型如下:chat:一对一聊天error:发送前一消息时发生错误,语法在上一节XMPP-CORE中已经有说明groupchat:组聊,这个不在本协议范围,需要参考扩展协议JEP-0045headline:不需要回复的消息norma

zzyy00的专栏 2739

Jabber Software:Jabber-NET、agsXMPP与Wilefire

原文:http://jiaoyu.gjjblog.com/ReadUrl.php?id=569681本篇介绍两个使用.NET技术,确切的说是使用C#写的Jabber Code Libraries – Jabber.NET、agsXMPP,以及一个Java写的跨平台Jabber Server – Wilefire。前言:即将完成Jabber Protocal(XMPP) : Core

蜗牛档案室 2511

Asterisk Jabber

<br />Jabber is a common name for XMPP-based instant-messaged and communication. <br />Native jabber support in Asterisk <br />The Jabber module in Asterisk (res_jabber) is available starting from the 1.4 series. Therefore, you can connect Asterisk as a cl

RTC hacker 2075

jabber

目录1 历史2 优点3 运作方式 4 连接其他协定5 Jabber客户端软件列表1 历史2 优点3 运作方式 4 连接其他协定5 Jabber客户端软件列表6 Jabber服务器端软件7 使用Jabber协议的客户端与服务器端对话的例子<br /> jabber Jabber是一个开放的、基于XML的协议。它的用途在即时通讯及Presence资讯方面。 <br /> jabber - 历史<br />JeremieMiller于1998年开始了这个项目。第一个公开版本于2000年5月发行。这个项目的主要

RTC hacker 2409

遇到Jabber

最近因为一个学生的原因 ,我偶遇到Jabber,很快就被其开放性所吸引.Jabber给了IM新的发展机遇.所有通讯环节都是依赖XML来实现,几乎不受平台限制, 这样就给客户端软件和服务器端软件更多选择,也增强了互操作性JSF是其主力组织.你可以通过JABBER.ORG来了解其全况.GOOGLE的通讯工具 GOOGLE TALK 正是利用JABBER来开发后面我将写上一些关于JABBER开发的文章

Mr Xie的专栏----- 精致的代码是艺术品 1328

收发Jabber消息流程

  1.   聊天对话框基本信息:1)        对话框模板:  IDD_MSG2)        窗口过程:  DlgProcMessage3)        “发送”按钮: IDOK 在聊天对话框初始化的时候关于该联系人所用协议等信息已经做为该窗口的用户数据设置好了,用到的时候只要以GWL_USERDATA 为参数调用GetWindowLong就可以得到该用户数据的

hurtmanzc的专栏 5263

Jabber 协议 概述

1. 介绍    Jabber是一个由开源社区发起并领导开发的即时消息和在线状态的系统。Jabber系统和其它即时消息(IM)服务的一个功能上的差别在于Jabber拥有开放的XML协议。在保持Jabber1.0版本有关消息核心以及在线状态的协议的基础上,增加了一些必要的扩展。本文档将对Jabber服务器1.4版的Jabber协议进行介绍。    在XML上下文的数据流中,Jabber开放的

2397

Jabber

   Jabber 是著名的Linux即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用。Jabber最有优势的就是其通信协议,可以和多种即时通讯对接。比如有第三方插件,能让jabber用户和MSN 、Yahoo  Messager、ICQ等IM用户相互通讯。因为Google遵从jabber协议,并且Google已经将Gt

Transient1984的专栏 1100

jabber客户端mobber的分析

JABBER客户端是依托SOCKET,HTTP等网络连接发送XMPP协议定义的STREAM流的客户端程序。mobber是java实现的J2ME jabber客户端,核心是按照XMPP协议实现了XML的读写.doc文档如下: 点击下载此文件

乌托邦 1396

Jabber介绍

Jabber介绍一. 前言    这是我粗略读了一遍Jabber协议和相关技术文章后的产物,有些地方不一定准确。在文章中引用的一些代码来自www.jabber.org上的文章。二. 什么是Jabber    Jabber就像ICQ,MSN一样,是一个基于Internet的即时通讯系统,但是同这些即时通讯软件不同的是,它是一个开放的即时通讯系统,也是一个基于XML Stream 的协议,用于在I

Lutts的专栏 1341

Jabber 协议 概述(2)

6.11. jabber:iq:register——注册请求<br />注册请求名字空间对一个或多个服务进行注册。它也被用来更新或删除一个注册。<br />例子:<br /><query xmlns="jabber:iq:register"><br /><instructions><br />Some instructions to be displayed when the<br />user is filling out the form.<br /></instructions><br /><user

qqiabc521的专栏 3954

计量经济学(因果关系探究-空间双重差分模型: 破解空间溢出效应的因果分析工具)

本文介绍了传统双重差分(DID)模型及其局限性,重点阐述了空间DID模型的必要性。传统DID通过组间差分分离干预效应,但无法处理空间溢出效应。空间DID模型引入空间计量方法,包括三种类型:空间自回归模型(SDID-SAR)捕捉因变量溢出,空间误差模型(SDID-SEM)处理残差相关性,空间杜宾模型(SDID-SDM)同时考虑因变量和自变量的空间滞后。模型选择需结合空间相关性检验,适用于环境政策、房地产限购等存在空间交互效应的研究场景。

YBAdvanceFu的博客 1961

STC单片机STC8H-STC8G-STC8A-STC15W-STC15F系列Protel Altium 原理图库+PCB库

STC单片机STC8H_STC8G_STC8A_STC15W_STC15F系列Protel Altium 原理图库+PCB库合集原理图库:Library Component Count : 85Name Description----------------------------------------------------------------------------------------------------STC15F101W_SOP8_DIP8STC15F2K60S2_PDIP40STC15F2K60S2_PLCC44STC15F2K60S2_QFP32STC15F2K60S2_QFP44STC15F2K60S2_SOP28_SKDIP28STC15F2K60S2_SOP32STC15F2K60S2_TSSOP20STC15F408AD_QFP32STC15F408AD_SOP28_SKDIP28STC15W104SW_SOP16_DIP16STC15W404S_PLCC44STC15W404S_SOP28_SKDIP28STC15W404S_SOP32STC15W408AD_SOP16_DIP16STC15W408AD_SOP20_DIP20_LSSOP20STC15W408AD_SOP28_SKDIP28STC15W408S_LQFP32STC15W408S_LQFP44STC15W408S_PDIP40STC15W408S_PLCC44STC15W408S_SOP28_SKDIP28STC15W408S_SOP32STC15W4K60S4_LQFP32STC15W4K60S4_LQFP44STC15W4K60S4_LQFP48STC15W4K60S4_LQFP64STC15W4K60S4_PDIP40STC15W4K60S4_PLCC44STC15W4K60S4_SOP28_SKDIP28STC15W4K60S4_SOP32STC16F32K128-64PINSTC8A4K64S2A12_LQFP44STC8A4K64S2A12_LQFP48STC8A4K64S2A12_LQFP64STC8A4K64S2A12_PDIP40STC8A8K64S4A12_LQFP44STC8A8K64S4A12_LQFP48STC8A8K64S4A12_LQFP64STC8A8K64S4A12_PDIP40STC8F2K64S2_LQFP32STC8F2K64S2_LQFP44STC8F2K64S2_PDIP40STC8F2K64S4_LQFP32STC8F2K64S4_LQFP44STC8F2K64S4_PDIP40STC8G1K08-QFN20STC8G1K08-SOP16STC8G1K08-SOP8STC8G1K08-TSSOP20STC8G1K08A-SOP8STC8G1K08T-TSSOP20STC8G2K64S2-48PINSTC8G2K64S4-48PINSTC8H1K08-QFN20STC8H1K08-TSSOP20STC8H1K28-32PINSTC8H8K64U-48PINSTC8H8K64U-64PIN封装库:Component Count : 31Component Name-----------------------------------------------DFN8(3x3mm)DFN8(4x4mm)DIP8DIP16DIP20DIP40LQFP32LQFP44LQFP48LQFP64LLQFP64SLQFP64S(12x12)LSSOP20PLCC44PQFP44QFN20(3x3mm)QFN28QFN32QFN32(4x4mm)QFN48QFN48(6X6mm)QFN64QFN64(8X8mm)SKDIP28SOP8SOP16SOP20SOP28SOP32TSSOP20TSSOP28

上一篇: apache虚拟主机配置
下一篇: Subscriptions 运行机制
niitsoftware
博客等级 码龄19年 4粉丝 18原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值