??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲成人福利在线观看,亚洲伊人久久大香线蕉结合,99久久亚洲综合精品成人网http://www.tkk7.com/hoojo/category/51688.html学习(fn)在于U篏Q滴水可以石I!学而不思则|,思而不学则D! zh-cnMon, 13 Aug 2012 09:35:27 GMTMon, 13 Aug 2012 09:35:27 GMT60JavaScript/jQuery、HTML、CSS 构徏 Web IM q程及时聊天通信E序http://www.tkk7.com/hoojo/archive/2012/08/13/385360.htmlhoojohoojoMon, 13 Aug 2012 01:39:00 GMThttp://www.tkk7.com/hoojo/archive/2012/08/13/385360.htmlhttp://www.tkk7.com/hoojo/comments/385360.htmlhttp://www.tkk7.com/hoojo/archive/2012/08/13/385360.html#Feedback0http://www.tkk7.com/hoojo/comments/commentRss/385360.htmlhttp://www.tkk7.com/hoojo/services/trackbacks/385360.html阅读全文

hoojo 2012-08-13 09:39 发表评论
]]>
Ud应用Q手机应用)开发IM聊天E序解决Ҏ(gu)http://www.tkk7.com/hoojo/archive/2012/07/31/384441.htmlhoojohoojoTue, 31 Jul 2012 07:16:00 GMThttp://www.tkk7.com/hoojo/archive/2012/07/31/384441.htmlhttp://www.tkk7.com/hoojo/comments/384441.htmlhttp://www.tkk7.com/hoojo/archive/2012/07/31/384441.html#Feedback0http://www.tkk7.com/hoojo/comments/commentRss/384441.htmlhttp://www.tkk7.com/hoojo/services/trackbacks/384441.htmlq个解决Ҏ(gu)已经定制下来很久了,上一D|间比较忙Q没有时间整q些东西。最q稍微好些,不怎么加班。所以抽Iȝ下,同时也分享给大家Q也是l大家一个借鉴吧!或许qƈ不是最好的解决Ҏ(gu)Q但只要能满_前需求的最好方案也是最好的解决Ҏ(gu)Q谁说不是呢QO(∩_∩)O~

 

我们采用的方案如下:

先看?/p>

xmpp-server-client

上图的流E大致上是这L(fng)Q?

手机端向PC端发送聊天内?

1、手机端E序通过Socketq接服务器端的ServerSocket

2、然后服务器端根据手机Mobile客户端发送过来统一规范的报文或聊天内容Q进行解?

3、然后将解析的内容,再用smack框架转发到openfire服务?

4、最后由openfire服务器向客户端(BS、CS、PhoneClientQ程序发送聊天信息。这里的客户端可以是pc上的览器,pc上的桌面应用Q手机应用等

5、PC客户端BSE序Q用http bind方式监听Q的长连接监听到openfire服务器发送过来的数据Q直接在面中显C?/p>

 

同样QPC客户端向手机端发送聊天内?

1、PC客户端(BSQ可以直接用http bindQxmpp 提供的httph的长q接方式Q直接向openfire服务器发送聊天数据;

2、然后openfire服务器接收到聊天内容的时候,q时候socket服务器中的smack框架中有一个聊天内容的监听?

3、监听到PC端向openfire发送的内容后,会用socket的流向手机端发送我们定义好的报文或是聊天内?

4、手机端的socket会不停的轮询Q可以模拟心跛_长连接的方式Q,判断是否有消息到达,如果有则昄

 

而普通的聊天E序的流E则是客L(fng)发送信息到openfire服务器,openfire服务器再消息{发给其他客户端。他们省Msocket服务器这部分Q那我们Z么要加上socket服务器这部分呢?

我们q样做也是有自己的道理的Q?

首先Q如果让手机端自己实现向openfire服务器发送程序的代码Q那工作量是相当大的。因为每个手机^C用的语言都不同,每个q_都需要实现向openfire服务器发送聊天信息的报文。这其实是在做重复的工作,而且每个q_实现向手机端发送报文信息的技术会让每个手机端的开发h员都要学会一套和openfire交互的代码。这势必会重复工作、重复相同业务的代码。所以,把这些代码放在一个tcp/ip的socket中{服务器进行统一发送,q也是有好处的?

其次Q把所以发送消息在报文在socket服务器完成,可以对业务进行一个统一的处理、消息过滤?/p>

 

手机端被否决的解x案,供参?/font>

手机端用http长连接的方式Q这个是不行?/p>

其一、手机的Ud|络不稳定,长连接会l常断掉Q当然你可以自动q行重连

其二、长q接一直连接在服务器上Q占用服务器资源。当然你可以使用心蟩式长q接或是轮询方式

其三、手机端一直连接服务器会用手机端用户的网l带宽流量(量不是免费的,客户会怎么惻I

其四、手机端一直连着服务器,Ҏ(gu)机的?sh)量也有消耗(现在决电(sh)量也是一个问题)



hoojo 2012-07-31 15:16 发表评论
]]>
XMPP/Smack/Openfire javax.net.ssl.SSLException: Received fatal alert: internal_errorhttp://www.tkk7.com/hoojo/archive/2012/07/12/382901.htmlhoojohoojoThu, 12 Jul 2012 08:49:00 GMThttp://www.tkk7.com/hoojo/archive/2012/07/12/382901.htmlhttp://www.tkk7.com/hoojo/comments/382901.htmlhttp://www.tkk7.com/hoojo/archive/2012/07/12/382901.html#Feedback0http://www.tkk7.com/hoojo/comments/commentRss/382901.htmlhttp://www.tkk7.com/hoojo/services/trackbacks/382901.html在xmpp协议通信中,用smack框架d非本地openfire服务器的时候,出现javax.net.ssl.SSLException: Received fatal alert: internal_error异常信息。原因是d他网openfire服务器出现登录gӞ在没有成功链接到openfire服务器)Q然后就q行dlogin操作的时候,׃出现q个异常?/p>

 

解决办法

1、在链接openfire服务器后Q线E休眠一D|_再进行登录login操作?/p>

…?/p>

connection.connect();
Thread.sleep(3000);

connection.login(user, pass);

…?

 

2、设|setPacketReplyTimeout参数

......

SmackConfiguration.setPacketReplyTimeout(PACKET_REPLY_TIMEOUT);
config = new ConnectionConfiguration(SERVER, PORT);

......

注意Q如果设|了休眠旉或setPacketReplyTimeout参数后还是出现错误,误旉讄再大些看?/p>

参考官方解{:http://community.igniterealtime.org/message/206443#206443



hoojo 2012-07-12 16:49 发表评论
]]>
Smack l合 Openfire服务器,建立IM通信Q发送聊天消?/title><link>http://www.tkk7.com/hoojo/archive/2012/06/25/381445.html</link><dc:creator>hoojo</dc:creator><author>hoojo</author><pubDate>Mon, 25 Jun 2012 09:41:00 GMT</pubDate><guid>http://www.tkk7.com/hoojo/archive/2012/06/25/381445.html</guid><wfw:comment>http://www.tkk7.com/hoojo/comments/381445.html</wfw:comment><comments>http://www.tkk7.com/hoojo/archive/2012/06/25/381445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/hoojo/comments/commentRss/381445.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/hoojo/services/trackbacks/381445.html</trackback:ping><description><![CDATA[     摘要: 在文章开始,请你了解和熟(zhn)openfire斚w的相关知识,q样对你理解下面代码以及下面代码的用途有很好的了解。同Ӟ你可能需要安装一个简单的CS聊天工具Q来试你的代码是否成功的在openfire服务器上建立会话链接Qƈ成功的向在线用户发送聊天消息?必须了解Qhttp://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html http://w...  <a href='http://www.tkk7.com/hoojo/archive/2012/06/25/381445.html'>阅读全文</a><img src ="http://www.tkk7.com/hoojo/aggbug/381445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/hoojo/" target="_blank">hoojo</a> 2012-06-25 17:41 <a href="http://www.tkk7.com/hoojo/archive/2012/06/25/381445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Openfire与XMPP协议http://www.tkk7.com/hoojo/archive/2012/06/18/381035.htmlhoojohoojoMon, 18 Jun 2012 12:00:00 GMThttp://www.tkk7.com/hoojo/archive/2012/06/18/381035.htmlhttp://www.tkk7.com/hoojo/comments/381035.htmlhttp://www.tkk7.com/hoojo/archive/2012/06/18/381035.html#Feedback0http://www.tkk7.com/hoojo/comments/commentRss/381035.htmlhttp://www.tkk7.com/hoojo/services/trackbacks/381035.html关于xmpp协议可以参考:http://www.jabbercn.org

什么是OpenFire

Openfire 采用Java开发,开源的实时协作QRTCQ服务器ZXMPPQJabberQ协议?

  (zhn)可以用它L的构建高效率的即旉信服务器。Openfire安装和用都非常单,q利用Webq行理。单台服务器可支持上万ƈ发用戗?

׃是采用开攄XMPP协议Q?zhn)可以使用各种支持XMPP协议的IM客户端Y件登陆服务?

XMPPQ?/b>JabberQ协?/b>

1?介绍

XMPP是一U基于XML的协议,它承了在XML环境中灵zȝ发展性。因此,ZXMPP的应用具有超强的可扩展性。经q扩展以后的XMPP可以通过发送扩展的信息来处理用L(fng)需求,以及在XMPP的顶端徏立如内容发布pȝ和基于地址的服务等应用E?序。而且QXMPP包含了针Ҏ(gu)务器端的软g协议Q之能与另一个进行通话Q这使得开发者更Ҏ(gu)建立客户应用E序或给一个配好系l添加功能?

2?定义Q?b>

XMPPQ可扩展消息处理现场协议Q是Z可扩展标记语aQXMLQ的协议Q它用于x消息QIMQ以及在U现场探。它在促q服务器之间的准x操作。这个协议可能最l允许因特网用户向因特网上的其他M人发送即时消息,即其操作系l和览器不同?

XMPP的前w是JabberQ?一个开源Ş式组l生的|络x通信协议。XMPP目前被IETF国际标准l织完成了标准化工作。标准化的核心结果分Z部分Q?

核心的XML传输协?

ZXML FreeEIM传输的x通讯扩展应用

XMPP的核心XML传输协议的定义使得XMPP能够在一个比以往|络通信协议更规范的q_上。借助于XML易于解析和阅ȝҎ(gu),使得XMPP的协议能够非常漂亮?

XMPP的即旉讯扩展应用部分是根据IETF在这之前对即旉讯的一个抽象定义的Q与其他业已得到q泛使用的即旉讯协议Q诸如AIMQQQ{有功能完整Q完善等先进性?

在IETF 中,把IM协议划分为四U协议,x信息和出席协?Instant Messaging and Presence Protocol, IMPP)、出席和x信息协议(Presence and Instant Messaging Protocol, PRIM)、针对即时信息和出席扩展的会话发起协?Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions, SIMPLE)Q以及可扩展的消息出席协?XMPP)。最初研发IMPP 也是Z创徏一U标准化的协议,但是今天QIMPP 已经发展成ؓ基本协议单元Q定义所有即旉信协议应该支持的核心功能集?

3?XMPP协议的优?

a. XMPP 协议是公开的,由JSF开源社区组l开发的。XMPP 协议q不属于M的机构和个hQ而是属于整个C֌Q这一点从Ҏ(gu)上保证了其开放性?

b. XMPP 协议h良好的扩展性。在XMPP 中,x消息和到Z息都是基于XML 的结构化信息Q这些信息以XML ?XML Stanza)的Ş式在通信实体间交换。XMPP 发挥了XML l构化数据的通用传输层的作用Q它?yu)出席和上下文敏感信息嵌入到XML l构化数据中Q从而数据以极高的效率传送给最合适的资源。基于XML 建立h的应用具有良好的语义完整性和扩展性?

c. 分布式的|络架构。XMPP 协议都是ZClient/Server 架构Q但是XMPP协议本nq没有这L(fng)限制。网l的架构和电(sh)子邮件十分相|但没有结合Q何特定的|络架构Q适用范围非常q泛?

d. XMPP h很好的弹性。XMPP 除了可用在即旉信的应用程序,q能用在|络理、内容供Eѝ协同工兗档案共享、游戏、远端系l监控等?

e. 安全性。XMPP在Client-to-Server通信Q和Server-to-Server通信中都使用TLS (Transport Layer Security)协议作ؓ通信通道的加密方法,保证通信的安全。Q何XMPP服务器可以独立于公众XMPP|络Q例如在企业内部|络中)Q而用SASL及TLS{技术更加增Z通信的安全性。如下图所C:

4?XMPP协议的组?

主要的XMPP 协议范本及当今应用很q的XMPP 扩展Q?

l RFC 3920 XMPPQ新的RFC6120Q:核心。定义了XMPP 协议框架下应用的|络架构Q引入了XML StreamQXML )与XML StanzaQXML 节)Qƈ规定XMPP 协议在通信q程中用的XML 标签。用XML 标签从根本上说是协议开放性与扩展性的需要。此外,在通信的安全方面,把TLS 安全传输机制与SASL 认证机制引入到内核,与XMPP q行无缝的连接,为协议的安全性、可靠性奠定了基础。Core 文档q规定了错误的定义及处理、XML 的用规范、JIDQJabber IdentifierQJabber 标识W)的定义、命名规范等{。所以这是所有基于XMPP 协议的应用都必需支持的文档?

l RFC 3921Q用h功登陆到服务器之后,发布更新自己的在U好友管理、发送即时聊天消息等业务。所有的q些业务都是通过三种基本的XML 节来完成的:IQ StanzaQIQ 节), Presence StanzaQPresence 节), Message StanzaQMessage 节)。RFC3921 q对d{略q行了定义,定义是多U阻塞方式。可以说QRFC3921 是RFC3920 的充分补充。两个文档结合v来,Ş成了一个基本的x通信协议q_Q在q个q_上可以开发出各种各样的应用?

l XEP-0030 服务搜烦。一个强大的用来定XMPP |络中的其它实体所支持Ҏ(gu)的协议?

l XEP-0115 实体性能。XEP-0030 的一个通过x出席的定Ӟ可以实时改变交变q告功能?

l XEP-0045 多h聊天。一l定义参与和理多用戯天室的协议,cM于Internet 的Relay ChatQ具有很高的安全性?

l XEP-0096 文g传输。定义了从一个XMPP 实体到另一个的文g传输?

l XEP-0124 HTTP l定。将XMPP l定到HTTP 而不是TCPQ主要用于不能够持久的维持与服务器TCP q接的设备?

l XEP-0166 Jingle。规定了多媒体通信协商的整体架构?

l XEP-0167 Jingle Audio Content Description Format。定义了从一个XMPP 实体到另一个的语音传输q程?

l XEP-0176 Jingle ICEQInteractive Connectivity EstablishmentQTransport。ICE传输机制Q文件解决了如何让防火墙或是NATQNetwork Address TranslationQ保护下的实体徏立连接的问题?

l XEP-0177 Jingle Raw UDP Transport。纯UDP 传输机制Q文件讲qC如何在没有防火墙且在同一|络下徏立连接的?

l XEP-0180 Jingle Video Content Description Format。定义了从一个XMPP 实体到另一个的视频传输q程?

l XEP-0181 Jingle DTMFQDual Tone Multi-FrequencyQ?

l XEP-0183 Jingle Telepathy Transport Method?

5?XMPP协议|络架构

XMPP是一个典型的C/S架构Q而不是像大多数即旉讯软g一P使用P2P客户端到客户端的架构Q也是说在大多数情况下Q当两个客户端进行通讯Ӟ他们的消息都是通过服务器传递的(也有例外Q例如在两个客户端传输文件时)Q采用这U架构,主要是ؓ了简化客L(fng)Q将大多数工作放在服务器端进行,q样Q客L(fng)的工作就比较单,而且Q当增加功能Ӟ多数是在服务器端q行QXMPP服务的框架结构如下图所C.XMPP中定义了三个角色QXMPP客户端,XMPP服务器、网养I通信能够在这三者的L两个之间双向发生Q服务器同时承担了客L(fng)信息记录、连接管理和信息的\由功能.|关承担着与异构即旉信pȝ的互联互通,异构pȝ可以包括SMS(短信)、MSN、ICQ{.基本的网lŞ式是单客L(fng)通过TCPQIPq接到单服务器,然后在之上传输XMLQ工作原理是Q?

(1) 点连接到服务器;

(2) 务器利用本地目录pȝ中的证书对其认证Q?

(3) Ҏ(gu)定目标地址Q让服务器告知目标状态;

(4) 务器查找、连接ƈq行怺认证Q?

(5) 点之间进行交互;

6?XMPP客户?

XMPP pȝ的一个设计标准是必须支持单的客户端。事实上QXMPP pȝ架构对客L(fng)只有很少的几个限制。一个XMPP 客户端必L持的功能有:

1. 通过 TCP 套接字与XMPP 服务器进行通信Q?

2. 解析l织好的 XML 信息包;

3. 理解消息数据cd?

XMPP 复杂性从客户端{Ud服务器端。这使得客户端编写变得非常容易,更新pȝ功能也同样变得容易。XMPP 客户端与服务端通过XML 在TCP 套接字的5222 端口q行通信Q而不需要客L(fng)之间直接q行通信?

基本的XMPP 客户端必dC下标准协议(XEP-0211Q:

RFC3920 核心协议Core

RFC3921 x消息和出席协议Instant Messaging and Presence

XEP-0030 服务发现Service Discovery

XEP-0115 实体能力Entity Capabilities

7?XMPP服务?

XMPP 服务器遵循两个主要法则:

1、监听客L(fng)q接Qƈ直接与客L(fng)应用E序通信Q?

2、与其他 XMPP 服务器通信Q?

XMPP开源服务器一般被设计成模块化Q由各个不同的代码包构成Q这些代码包分别处理Session理、用户和服务器之间的通信、服务器之间的通信、DNSQDomain Name SystemQ{换、存储用L(fng)个h信息和朋友名单、保留用户在下线时收到的信息、用h册、用L(fng)w䆾和权限认证、根据用L(fng)要求qo信息和系l记录等。另外,服务器可以通过附加服务来进行扩展,如完整的安全{略Q允许服务器lg的连接或客户端选择Q通向其他消息pȝ的网兟?

基本的XMPP 服务器必dC下标准协?

RFC3920 核心协议Core

RFC3921 x消息和出席协议Instant Messaging and Presence

XEP-0030 服务发现Service Discovery

8?XMPP|关

XMPP H出的特Ҏ(gu)可以和其他即旉信pȝ交换信息和用户在U状c由于协议不同,XMPP 和其他系l交换信息必通过协议的{换来实现Q目前几U主即旉信协议都没有公开Q所以XMPP 服务器本wƈ没有实现和其他协议的转换Q但它的架构允许转换的实现。实现这个特D功能的服务端在XMPP 架构里叫做网?gateway)。目前,XMPP 实现了和AIM、ICQ、IRC、MSN Massager、RSS0.9 和Yahoo Massager 的协议{换。由于网关的存在QXMPP 架构事实上兼Ҏ(gu)有其他即旉信|络Q这无疑大大提高了XMPP 的灵zL和可扩展性?

9?XMPP地址格式

一个实体在XMPP|络l构中被UCؓ一个接点,它有唯一的标C符jabber identifier(JID)Q即实体地址Q用来表CZ个Jabber用户Q但是也可以表示其他内容Q例如一个聊天室Q一个有效的JID包括一pd元素Q?

(1) ?domain identifier)Q?

(2) ?node identifier)Q?

(3) ?resource identifier)Q?

它的格式是node@domain/resourceQnode@domainQ类似电(sh)子邮件的地址格式Qdomain用来表示接点不同的设备或位置Q这个是可选的Q例如a在Server1上注册了一个用P用户名ؓdoomQ那么a的JID是doom@serverlQ在发送消息时Q指明doom@serverl可以了Qresource可以不用指定Q但a在登录到q个ServerӞfl的JID可能是doom@serverl、exodus(如果a用Exodus软gd)Q也可能是doom@serverl/psi(如果a用psi软gd)Q资源只用来识别属于用户的位|或讑֤{,一个用户可以同时以多种资源与同一个XMPP服务器连接?

10?XMPP消息格式

XMPP中定义了3个顶层XML元素: Message、Presence、IQQ下面针对这三种元素q行介绍?

<Message>

用于在两个jabber用户之间发送信息。Jsm(jabber会话理?负责满所有的消息Q不目标用L(fng)状态如何。如果用户在Ujsm立即提交;否则jsm存储?

To : 标识消息的接收方?

from : 指发送方的名字或标示(id)

Text: 此元素包含了要提交给目标用户的信息?

l构如下所C?

<message to= ‘lily@jabber.org/contact?type =’chat?gt;

<body> 你好Q在忙吗</body>

</message>

<Presence>

用来表明用户的状态,如:online、away、dnd(请勿打扰){。当用户ȝ或改变自q状态时Q就会在stream的上下文中插入一个Presence元素Q来表明自n的状态.l构如下所C:

<presence>

From =‘lily @ jabber.com/contact?

To = ‘yaoman @ jabber.com/contact'

<status> Online </status>

</presence>

<presence>元素可以取下面几U?

Probe: 用于向接受消息方法发送特D的h

subscribe: 当接受方状态改变时Q自动向发送方发送presence信息?

< IQ >

一U请求/响应机制Q从一个实体从发送请求,另外一个实体接受请求,q进行响应.例如Qclient在stream的上下文中插入一个元素,向Serverh得到自己的好友列表,Serverq回一个,里面是请求的l果Q?

<iq > 主要的属性是type。包?

Get :获取当前域倹{?

Set :讄或替换get查询的倹{?

Result :说明成功的响应了先前的查询?

Error: 查询和响应中出现的错误?

l构如下所C?

<iq from =‘lily @ jabber.com/contact’id=?364564666?Type=’result?gt;

XMPP通信协议

一?Stream

<!-- #################### 通信内容采用压羃技术,以及通信的相兛_?####################### -->
<stream:stream xmlns:stream="http://etherx.jabber.org/streams"
        xmlns="jabber:client" from="127.0.0.1" id="e38900bc" xml:lang="en"
        version="1.0">
<!--
xmlns 表示通信客户?/span>
from 客户端的地址Q来源)
id
lang 通信语言
-->        
<stream:features>
    <!-- 开始tls协议[TLS]的频道加密方?-->
    <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"></starttls>
    <!-- 加密技术、安全证?-->
    <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
        <mechanism>DIGEST-MD5</mechanism>
        <mechanism>PLAIN</mechanism>
        <mechanism>ANONYMOUS</mechanism>
        <mechanism>CRAM-MD5</mechanism>
    </mechanisms>
    <!-- 采用压羃技?-->
    <compression xmlns="http://jabber.org/features/compress">
        <method>zlib</method>
    </compression>
    <!-- 权限 -->
    <auth xmlns="http://jabber.org/features/iq-auth" />
    <!-- 注册 -->
    <register xmlns="http://jabber.org/features/iq-register" />
</stream:features>

关于TSL 参考:http://www.jabbercn.org/RFC3920

1?/b>TSL协议遵@以下规则Q?/b>

A?一个遵守本协议的初始化实体必须QMUSTQ在初始化流的头信息中包含一?version'属性ƈ把D为?.0”?

B?如果TLS握手发生在两个服务器之间Q除非服务器声称的DNSL名已l被解析Q通信不能QMUST NOTQl进行?

C?当一个遵守本协议的接收实体接收了一个初始化(它的头信息中包含一?version'属性ƈ且D为?.0”)Q在发送应{流的的头信息(其中包含版本标记Q之后,它必d送(MUSTQ?lt;starttls/>元素Q名字空间ؓ 'urn:ietf:params:xml:ns:xmpp-tls'Q以及其他它支持的流Ҏ(gu)?

D?如果初始化实体选择使用TLS,TLS握手必须在SASL握手之前完成Q这个顺序用于帮助保护SASL握手时发送的认证信息的安全,同时可以在必要的时候在TLS握手之前为SASL外部机制提供证书?

E?TLS握手期间,一个实体不能(MUST NOTQ在的根元素中发送Q何空格符号作为元素的分隔W(在下面的TLSCZ中的MI格W都仅仅是ؓ了便于阅读)Q这个禁令用来帮助确保安全层字节_ֺ?

F?接收实体必须QMUSTQ在发?lt;proceed/> 元素的关闭符?>" 之后立刻开始TLS协商。初始化实体必须QMUSTQ在从接收实体接收到<proceed/> 元素的关闭符?>" 之后立刻开始TLS协商?

G?初始化实体必(MUSTQ验证接收实体出C的证书Q关于证书验证流E参见Certificate Validation ( W十四章W二??

H?证书必须QMUSTQ检查初始化实体(比如一个用?提供的主机名Q而不是通过DNSpȝ解析出来的主机名Q例如,如果用户指定一个主机名"example.com"而一个DNS SRV [SRV]查询q回"im.example.com"Q证书必(MUSTQ检?example.com".如果MU类的XMPP实体Q例如客L(fng)或服务器Q的JID出现在一个证书里Q它必须QMUSTQ表Cؓ一个别名实体里面的UTF8字符Ԍ存在于subjectAltName之中。如何?[ASN.1] 对象标识W?"id-on-xmppAddr" 定义在本文的W五章第一节第一节?

I?如果 TLS 握手成功了,接收实体必须QMUSTQ?丢弃TLS 生效之前从初始化实体得到的Q何不可靠的信?

J?如果 TLS 握手成功了,初始化实体必(MUSTQ?丢弃TLS 生效之前从接收实体得到的M不可靠的信息

K?如果 TLS 握手成功了,接收实体不能(MUST NOT)在流重新开始的时候通过提供其他的流Ҏ(gu)来向初始化实体提供 STARTTLS 扩展

L?如果 TLS 握手成功了,初始化实体必?MUST)l箋q行SASL握手

M?如果 TLS 握手p|了,接收实体必须QMUSTQ终止XML和相应的TCPq接?

N?关于必须QMUSTQ支持的机制Q参?Mandatory-to-Implement Technologies (W十四章W七? ?

2、当一个初始化实体?/b>TLS保护一个和接收实体之间的流Q其步骤如下:

A. 初始化实体打开一个TCPq接Q发送一个打开的XML头信息Q其'version'属性设|ؓ"1.0"Q给接收实体以初始化一个流?

B. 接收实体打开一个TCPq接Q发送一个XML头信息Q其'version'属性设|ؓ"1.0"Q给初始化实体作为应{?

C. 接收实体向初始化实体提议STARTTLS范围Q包括其他支持的特性)Q如果TLS对于和接收实体交互是必需的,它应该(SHOULDQ在<starttls/>元素中包含子元素<required/>

D. 初始化实体发出STARTTLS命o(例如, 一个符?urn:ietf:params:xml:ns:xmpp-tls'名字I间?<starttls/> 元素) 以通知接收实体它希望开始一个TLS握手来保护流?

E. 接收实体必须QMUSTQ以'urn:ietf:params:xml:ns:xmpp-tls'名字I间中的<proceed/>元素?lt;failure/>元素应答。如果失败,接收实体必须QMUSTQ终止XML和相应的TCPq接。如果l进行,接收实体必须QMUSTQ尝试通过TCPq接完成TLS握手q且在TLS握手完成之前不能QMUST NOTQ发送Q何其他XML数据?

F. 初始化实体和接收实体试完成TLS握手。(要符合[TLS]规范Q?

G. 如果 TLS 握手不成? 接收实体必须QMUSTQ终?TCP q接. 如果 TLS 握手成功, 初始化实体必(MUSTQ发送给接收实体一个打开的XML头信息来初始化一个新的流Q先发送一个关闭标{?lt;/stream>是不必要?因ؓ接收实体和初始化实体必须(MUST)保原来的流在TLS握手成功之后被关闭) ?

H. 在从初始化实体收到新的流头信息之后,接收实体必须QMUSTQ发送一个新的XML头信息l初始化实体作ؓ应答Q其中应包含可用的特性但不包含STATRTTLSҎ(gu)?/p>

hoojo 2012-06-18 20:00 发表评论
]]>
Jwchat 的安装和配置、Service unavailable、Authorization failed问题汇?/title><link>http://www.tkk7.com/hoojo/archive/2012/05/17/378444.html</link><dc:creator>hoojo</dc:creator><author>hoojo</author><pubDate>Thu, 17 May 2012 14:05:00 GMT</pubDate><guid>http://www.tkk7.com/hoojo/archive/2012/05/17/378444.html</guid><wfw:comment>http://www.tkk7.com/hoojo/comments/378444.html</wfw:comment><comments>http://www.tkk7.com/hoojo/archive/2012/05/17/378444.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/hoojo/comments/commentRss/378444.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/hoojo/services/trackbacks/378444.html</trackback:ping><description><![CDATA[<p>上一介l了Openfire开源聊天IM服务器的安装Q?a title="http://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html" >http://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html</a></p> <p>q篇文章介绍Jwchat的安装和配置</p> <p> </p> <p>首先Jwchat的配|和安装需要具备的环境Q? <p>Tomcat 5.0.28+/Tomcat 6 <p>JDK 1.6+ <p>Openfire 3.7.1 <p>1?下蝲jwchat工程文g <p>下蝲站点Q?a >http://blog.jwchat.org/jwchat/download/</a> <p>Zip下蝲Q?a >http://downloads.sourceforge.net/jwchat/jwchat-1.0.zip?use_mirror</a>= <p>  <p>2?下蝲完成后,jwchat-1.0.zip解压C的tomcat的webapps目录Q将jwchat-1.0命名为jwchatQ如果不q样的话Q可能会出现错误Q如Authorization failed。至这样会方便你访问jwchat工程? <p>然后index.html.zh_CN{这样带?.后缀.zh_CN的这L(fng)文g?zh_CN都删掉,q行重命名?zh_CN是表CZ文版的,当然你也可以直接?.后缀.后缀的文件进行重命名Q那样就是默认的英文版的了? <p>扚w命名工具c: <div class="rwurlqr" id="codeSnippetWrapper"> <div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px">package com.hoo.util;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px">import java.io.File;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000">/**</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> * <b>function:</b> 文g命名工具c?/span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> * @author hoojo</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> * @createDate 2012-5-14 下午01:58:14</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> * @file FileRenameUtils.java</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> * @package com.hoo.util</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> * @blog http://blog.csdn.net/IBM_hoojo</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> * @email hoojo_@126.com</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> * @version 1.0</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> */</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">public</span> <span style="color: #0000ff">abstract</span> <span style="color: #0000ff">class</span> FileRenameUtils {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> <span style="color: #0000ff">private</span> final <span style="color: #0000ff">static</span> String FILE_PATH = <span style="color: #006080">"D:\\apache-tomcat-6.0.33\\webapps\\jwchat"</span>;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> <span style="color: #008000">/**</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> * <b>function:</b> 指定目录下的文件的typecd的文Ӟq行重命名,命名后的文g去掉type</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> * <p>example: 如果type = htmlQ?index.html.html -> index.html</p></span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> * <p>example: 如果type = zh_CNQ?index.html.zh_CN -> index.html</p></span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> * @author hoojo</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> * @createDate 2012-5-16 下午02:16:48</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> * @param path</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> * @param type</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #008000"> */</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> rename(String path, String type) {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> <span style="color: #0000ff">if</span> (path == <span style="color: #0000ff">null</span> || <span style="color: #006080">""</span>.equals(path)) {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> path = FILE_PATH;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> File dir = <span style="color: #0000ff">new</span> File(path);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> File[] list = dir.listFiles();</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> <span style="color: #0000ff">for</span> (File file : list) {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> String name = file.getName();</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> String[] s = name.split(<span style="color: #006080">"\\."</span>);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> <span style="color: #0000ff">if</span> (s.length == 3 && type.equals(s[2])) {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> System.<span style="color: #0000ff">out</span>.println(s[0] + <span style="color: #006080">"--"</span> + s[1] + <span style="color: #006080">"--"</span> + s[2]);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> file.renameTo(<span style="color: #0000ff">new</span> File(path + <span style="color: #006080">"/"</span> + s[0] + <span style="color: #006080">"."</span> + s[1]));</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> main(String[] args) {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> FileRenameUtils.rename(<span style="color: #006080">"D:\\apache-tomcat-6.0.33\\webapps\\jwchat"</span>, <span style="color: #006080">"zh_CN"</span>);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px">}</pre><!--CRLF--></div></div> <p>3?下蝲JabberHTTPBindq个包,因ؓ直接下蝲的jwchat没有WEB-INF、web.xml是无法运行的? <p>JabberHTTPBind是jwchatq行http bind通信的一U方式,它可以让jwchat和openfireq行链接通信? <p>站点Q?a >http://blog.jwchat.org/jhb/</a> <p>下蝲地址Q?a >http://blog.jwchat.org/download/JabberHTTPBind-1.1.1.zip</a> <p>JabberHTTPBind会依赖xalan的library? <p>下蝲站点Q?a >http://xml.apache.org/xalan-j/downloads.html</a> <p>下蝲目录Q?a >http://labs.renren.com/apache-mirror/xml/xalan-j/</a> <p>  <p>4?下蝲完成后,JabberHTTPBind的zip解压出来的WEB-INF、META-INF一q放到刚才的jwchat目录中,q且刚才下载的xalan的xalan.jar,serializer.jar, xercesImpl.jar, xml-apis.jar攑ֈwebapps\jwchat\WEB-INF\lib目录下即可? <p>  <p>5?修改jwchat目录中的相关配置 <p>修改config.js文g <div class="ionwktl" id="codeSnippetWrapper"> <div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">var</span> BACKENDS = </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px">[</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> …?/pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> },</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> …?/pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> },</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> name:<span style="color: #006080">"Open Relay"</span>,</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> description:<span style="color: #006080">"HTTP Binding backend that allows connecting to any jabber server"</span>,</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> httpbase:<span style="color: #006080">"/JHB/"</span>, <span style="color: #008000">/* 修改q里为:/jwchat/JHB/ */</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> type:<span style="color: #006080">"binding"</span>,</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> default_server: SITENAME</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> },</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> …?/pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px">];</pre><!--CRLF--></div></div> <p>修改WEB-INF目录下的web.xml文g <div class="fblvmcl" id="codeSnippetWrapper"> <div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff"><</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">></span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> <span style="color: #0000ff"><</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">></span>Jabber HTTP Binding Servlet<span style="color: #0000ff"></</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">></span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> <span style="color: #0000ff"><</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">></span>/<span style="color: #0000ff"></</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">></span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> url-pattern修改为:/JHB/</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"> <span style="color: #008000"><!-- q里的修改主|对应上面的config.jsQ如果config.js的httpbase配置?jwchat/Q那q里的就不用修改?--></span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 10pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff"></</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">></span></pre><!--CRLF--></div></div> <p>6?启动tomcat后,讉K<a href="http://localhost:8080/jwchat/">http://localhost:8080/jwchat/</a> <p>如果d出现Service unavailableq个问题Q那么会有以下几U情况: <p>A?表明服务器不可用Q可能是openfire服务器没有启动, <p>B?webapps\jwchat \config.js的配|有问题Q如var SITENAME = "localhost";和openfire服务器地址没有对应 <p>C?伴随出现QException in thread "Thread-34" javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found异常Q可能是tomcat版本低于tomcat6或是jwchat~少相应的jar包,如缺xml的serializer.jar、xalan.jar、xercesImpl.jar、xml-apis.jar <p>D、如果在满了c步骤Q有djra包还出现Exception in thread "Thread-34" javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found异常Q徏议删除tomcat/work目录下的~存Q然后重启tomcat试试 <p>  <p>7?如果d出现Authorization failed验证p|Q那么有以下几种可能的情况: <p>A?用户没有注册 <p>B?openfire的证书(C:\Program Files\openfire\resources\securityQ没有安装到相应的jdk的C:\Program Files\Java\jre6\lib\security目录? <p>如果出现q种异常信息Qjavax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed也表明是安全证书的问题; <p>关于解决ssl验证Q网上有在jsjac.js中的if(this.has_sasl) q行前面加上this.has_sasl = false;来取消ssl安全证书的验证? <p>C?如果你的工程名称不是jwchatQ徏议把它修Ҏ(gu)jwchatq且修改config.xml的相关链接的配置QhttpbaseQ? <p>D?q有可能是你当前的用h有注册,q个时候你可以注册一个用h是在openfire控制台的用户l中d一个用P然后再等了看看是否存在这个问题? <p>  <p>8?修改服务器名U? <p>点击服务器à服务器理器à编辑属?修改服务器名U? <p><a href="http://www.tkk7.com/images/blogjava_net/hoojo/WindowsLiveWriter/JwchatServiceunavailableAuthorizationfai_11CE2/image_10.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.tkk7.com/images/blogjava_net/hoojo/WindowsLiveWriter/JwchatServiceunavailableAuthorizationfai_11CE2/image_thumb_4.png" width="562" height="177"></a> <p>修改后的服务器名U? <p><a href="http://www.tkk7.com/images/blogjava_net/hoojo/WindowsLiveWriter/JwchatServiceunavailableAuthorizationfai_11CE2/image_8.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.tkk7.com/images/blogjava_net/hoojo/WindowsLiveWriter/JwchatServiceunavailableAuthorizationfai_11CE2/image_thumb_3.png" width="342" height="196"></a> <p>出现叹号Q我们要删除安全证书Q点?yn)L务器à服务器设|à服务器安全证书删掉q里的证书? <p><a href="http://www.tkk7.com/images/blogjava_net/hoojo/WindowsLiveWriter/JwchatServiceunavailableAuthorizationfai_11CE2/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.tkk7.com/images/blogjava_net/hoojo/WindowsLiveWriter/JwchatServiceunavailableAuthorizationfai_11CE2/image_thumb_2.png" width="562" height="69"></a> <p>删除后,在当前页面会出现提示Q然后按照提C点ȝ应的链接Q重启服务器Q然后登陆,再生成证? <p><a href="http://www.tkk7.com/images/blogjava_net/hoojo/WindowsLiveWriter/JwchatServiceunavailableAuthorizationfai_11CE2/image_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.tkk7.com/images/blogjava_net/hoojo/WindowsLiveWriter/JwchatServiceunavailableAuthorizationfai_11CE2/image_thumb_1.png" width="281" height="81"></a> <p>生成证书需要点旉Q然后生成完成后Q手动重启openfire服务器,再次登陆发现警告没有了? <p>  <a href="http://www.tkk7.com/images/blogjava_net/hoojo/WindowsLiveWriter/JwchatServiceunavailableAuthorizationfai_11CE2/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.tkk7.com/images/blogjava_net/hoojo/WindowsLiveWriter/JwchatServiceunavailableAuthorizationfai_11CE2/image_thumb.png" width="316" height="186"></a> <p>9?在服务器端增加配|? <p>xmpp.httpbind.client.requests.polling = 0 <p>xmpp.httpbind.client.requests.wait = 10 <img src ="http://www.tkk7.com/hoojo/aggbug/378444.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/hoojo/" target="_blank">hoojo</a> 2012-05-17 22:05 <a href="http://www.tkk7.com/hoojo/archive/2012/05/17/378444.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Openfire 的安装和配置http://www.tkk7.com/hoojo/archive/2012/05/17/378440.htmlhoojohoojoThu, 17 May 2012 12:03:00 GMThttp://www.tkk7.com/hoojo/archive/2012/05/17/378440.htmlhttp://www.tkk7.com/hoojo/comments/378440.htmlhttp://www.tkk7.com/hoojo/archive/2012/05/17/378440.html#Feedback0http://www.tkk7.com/hoojo/comments/commentRss/378440.htmlhttp://www.tkk7.com/hoojo/services/trackbacks/378440.html1?下蝲最新的openfire安装文g

官方下蝲站点Q?a >http://www.igniterealtime.org/downloads/index.jsp#openfire

下蝲地址Q?

ExeQ?a >http://www.igniterealtime.org/downloads/download-landing.jsp?file=openfire/openfire_3_7_1.exe

ZIP: http://www.igniterealtime.org/downloads/download-landing.jsp?file=openfire/openfire_3_7_1.zip

我用的是zip解压版的安装文g?

其中openfire是服务器Q下面还有一个sparkQ这个是一个XMPP协议通信聊天的CS的IM软gQ它可以通过openfireq行聊天对话?

 

2?下蝲完成后,如果你下载的是exe文gQ执行你的安装文Ӟq行安装。这里我是zip的文件。解压后Q复制openfire目录到C:\Program Files\目录下;一定要在C:\Program Files\目录下的Q这样openfire安装完成了?

 

3?下面我们启动openfire服务器,q|它。在C:\Program Files\openfire\bin目录下有一个电(sh)灯的openfire.exe文gQ双?yn)L行,启动完成后可以看?

image

4?点击Launch Admin按钮q入http://127.0.0.1:9090/setup/index.jsp面Q配|openfire服务?

 

5?选择语言 中文?

image

点击continueq入

 

6?配置服务器域?

image

如果你是本地讉KQ那么你可以不修Ҏ(gu)是用localhost?27.0.0.1的方?

如果你用于外|或局域网讉KQ那么你的地址配置成外|或局域网地址

 

7?选择数据?

image

选择openfire自带的,当然你也可以选择你的数据库类型。如Oracle、SQLServer、MySQL{。如果openfire没有带jdbc的连接驱动,你需要添加连接数据库的jdbc驱动Q驱动放在C:\Program Files\openfire\lib目录?

 

8?选择Ҏ(gu)配|,默认卛_

image

 

9?理员邮Ӟ可以跌q步

image

 

10?安装完成

image

q入理员控制台面

 

11?q入http://127.0.0.1:9090/login.jsp面后,输入admin、密码admin登陆q入

image

 

12?q入后可以看?

image

服务器名U就是jwchat的连接地址Q你可以使用Spark、jwchat链接q个地址q行IM通信聊天…?

xQopenfire的安装和配置已经完成。下一文章开始完成jwchat的安装和配置?

如果你需要更换服务器名称ipQ请看下一文章!

hoojo 2012-05-17 20:03 发表评论
]]>
Operfire 安装指南http://www.tkk7.com/hoojo/archive/2012/05/13/378042.htmlhoojohoojoSun, 13 May 2012 07:21:00 GMThttp://www.tkk7.com/hoojo/archive/2012/05/13/378042.htmlhttp://www.tkk7.com/hoojo/comments/378042.htmlhttp://www.tkk7.com/hoojo/archive/2012/05/13/378042.html#Feedback0http://www.tkk7.com/hoojo/comments/commentRss/378042.htmlhttp://www.tkk7.com/hoojo/services/trackbacks/378042.html本文的英文原文来?http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/install-guide.html

安装指南

Openfire是一个强大的x消息QIMQ和聊天服务器,它实CXMPP协议。这份文件将引导(zhn)通过安装Openfire。对于更多的功能和信息的完整列表Q请讉KOpenfire|站Q?a >http://www.igniterealtime.org/projects/openfire/

目录

  • 1 安装
    • 1.1 Windows
    • 1.2 Linux/Unix
  • 2 安装概述
  • 3 分发版里的文?
  • 4 安装数据?
  • 5 安装服务?
  • 6 理控制?
  • 7 在Windows下运行Openfire
    • 7.1 Windows服务
    • 7.2 自定义参?/li>
  • 8 在Linux/Unix下运行Openfire
    • 8.1 自定义参?/li>
  • 9 插g
    • 9.1 安装插g
    • 9.2 理插g

安装

Windows

q行Openfire 安装? 应用~省被安装于目?c:\Program Files\Openfire .

Linux/Unix

可选择RPM包或tar.gz? 如果使用RPM? 用你的包理器运行把它Openfire安装到目?/opt/openfire:

rpm -ivh openfire_3_0_0.rpm

如果使用.tar.gz? 解压到目?/opt ?/usr/bin:

tar -xzvf openfire_3_0_0.tar.gz
mv openfire /opt

注意: .tar.gz包不一定包含Java虚拟?JRE). 所? 你必M前就?JDK ?JRE 1.5.0 (Java 5) 或之后安装到你的pȝ? 你可以在命o行键?"java -version" 来检查你的java版本Q然?(如果必要) 讉K http://java.sun.com 更新你的Java安装.

安装概述

Z完成Openfire的安? 你需要执行以下步?

  1. 数据?- 如果你选择使用一个外部数据库, 你必d备ؓOpenfire准备好你的数据库.
  2. 安装 - 使用内置的基于web的安装工h安装和验证服务器的配|?
  3. 理控制?- 使用Zweb的管理工h理服务?

本文也包括以下信?

  • 在Windows下运?
  • 在Unix/Linux下运?
  • 安装和用插?/li>

分发版里的文?/h4>

你的分发版里的文件应该像下面q样 (Z短一点,一些子目录被忽略了):

openfire/
 |- readme.html
 |- license.html
 |- conf/
 |- bin/
 |- jre/
 |- lib/
 |- plugins/
     |- admin/
 |- resources/
     |-database/
     |-security/
 |- documentation/
  • conf 目录Openfire用来存放配置文g.
  • bin 目录包含了服务器的可执行文g. Ҏ(gu)你安装的不同分发? 可用的执行文件也不同.
  • jre 目录包含了一?Java 5 虚拟机,打包在Windows和RPM版本Openfire里面?
  • lib 目录包含了运行Openfire所需要的?
  • plugins 目录包含了服务器插g. ~省? Openfire带了一个基于web的管理控制台插g.
  • resources/database 目录包含 SQL 架构文gQ用来新建Openfire数据? 以及已有安装的更新脚?
  • resources/security 目录是Openfirel护keystores的地方,用来支持SSLq接安全?
  • documentation 目录包含了服务器文档.

安装数据?/h4>

Openfire能把它的数据存储在一个嵌入式的数据库里,你也能选择使用一个外部数据库,例如MySQL或Oracle. 如果你喜Ƣ用外部数据库, 你必d开始安装之前准备好? 更多信息?a >数据库安?/a>.

安装服务?/h4>

Openfire內徏了一个基于web? "向导"驱动的安装和配置工具. 单地启动Openfire(分^台的指引如下) q用浏览器q接到管理控制台. Zweb的管理控制台的缺省端口是9090. 如果你和Openfire在同一台机? 以下URL通常会v作用: http://127.0.0.1:9090.

理控制?/h4>

在完成上q步骤之? Openfire被配置Q你可以用基于web的管理控制台理服务? URL应该和你用来安装服务器用的那个一P除非你在安装期间修改了那个端?

在Windows下运行Openfire

如果你用了Openfire安装? 在你的开始菜单里会有一个快h式来启动囑Ş化启动器. 否则, 在你?Openfire 安装位置?bin/ 目录q行 openfire.exe . 在启动界面上有一个按钮,允许你自动打开你的web览器连接正的URL来完成服务器的安?

launcher.png

Windows服务

如果你正在Windows下运行Openfire, 你或许想在初始化安装之后把Openfire作ؓ一个标准的Windows来运? 如果你用Windows安装? 一?openfire-service.exe 文g会出现在安装目录下?bin 目录. 你可以用这个可执行文g来安装和控制Openfire服务.

从控制台H口, 你可以运行以下命?

  • openfire-service /install -- 安装服务.
  • openfire-service /uninstall -- 卸蝲服务.
  • openfire-service /start -- 启动服务.
  • openfire-service /stop -- 停止服务.

windows_service.png

你也可以在Windows控制面板使用服务工具来启动和停止服务.

注意: 那个囑Ş化的启动器目前和W(xu)indows服务q不兼容. 如果你安装了服务, 你应该用上q的服务控制台来控制服务而不是这个图形启动器.

自定义参?/h5>

高用户可能希望传递参数到Java虚拟?VM)来定制Openfire的运行时环境. 你可以在你的Openfire安装目录下的 bin/ 目录建立 vmoptions 文g来做到这一? 对于 Windows服务, 你要Z个新文本文gQ名?openfire-service.vmoptions. 每个lVM的参数应该独立占用文件中的一? 例如, 讄最堆栈大ؓ 512 MB 和最?VM 堆栈?1024 MB, 你可以用:

-Xms512m
-Xmx1024m

要新建参数给普通的启动? 新徏一个文Ӟ名ؓ openfired.vmoptions (因ؓ openfire.exe 启动器会调用 openfired.exe 可执行文件来实际地启动服务器).

在Linux/Unix下运行Openfire

如果你正在一?Red Hat 或类 Red Hat 的系l上q行 (CentOS, Fedora, {等), 我们使用RPMQ因为它包含一些标准的cRed Hat环境的自定义处理. 假设你用了RPM, 你可以?strong>/etc/init.d/openfire 脚本启动和停止Openfire.

# /etc/init.d/openfire
Usage /etc/init.d/openfire {start|stop|restart|status|condrestart|reload}
# /etc/init.d/openfire start
Starting openfire:

如果你正在一个不同的Linux/Unix变种下运? q且/或你使用了tar.gz '安装?, 你可以用你的Openfire安装目录下的 bin/openfire 脚本启动和停止Openfire:

# ./openfire
Usage: ./openfire {start|stop}
# ./openfire start
Starting openfire

如果你想把Openfire安装成一个服? ?bin/extra 目录提供了两个脚?

  • redhat-postinstall.sh -- 自动把Openfire安装为Red Hat的服? 它会新徏一?jive"用户Q然后拷?openfired 脚本C?init.d 目录. q个脚本必须以rootw䆾来运? 更多信息L(fng)脚本里的注释.
  • openfired -- 把Openfire当成服务q行的脚? 你必L工配|这个脚? 更多信息L(fng)脚本里的注释.

如果你通过RPM安装Q不推荐你用这些脚? RPM已经把这些脚本照־很好?

自定义参?/h5>

你可以在你的Openfire安装目录下的 bin/ 目录建立 vmoptions 文g来做到这一? 对于 Windows服务, 你要Z个新文本文gQ名?openfire-service.vmoptions. 每个lVM的参数应该独立占用文件中的一? 例如, 讄最堆栈大ؓ 512 MB 和最?VM 堆栈?1024 MB, 你可以用:

高用户可能希望传递参数到Java虚拟?VM)来定制Openfire的运行时环境. 如果你是通过RPM安装? 你可以编?/etc/sysconfig/openfire 文gq找?OPENFIRE_OPTS 选项来定制它. 如果你通过.tar.gz安装? 你要调整你的启动脚本来满你的需?

插g

插glOpenfire增加了额外的Ҏ(gu)和协议支持. 在安装完你的Openfire之后, 你可能想下蝲q安装插件以增进你的服务? 插g可从 igniterealtime.org ?plugins 面下蝲或直接从内部的管理控制台直接下蝲.

安装插g

如果你从Openfire内部的管理控制台下蝲了一个插? 它将被自动安? 如果你手工下载这个插?打包成一?jar文g), 你可以通过把插件文件拷贝到Openfire安装目录下的 plugins/ 目录来布|它. 一个插件监控器自动解包这个插件到一个目录ƈ安装q个插g到Openfire. 你也可以在管理控制台使用"上传插g"功能(?插g 标签? 来从本地文gpȝ装入一个插件到服务?

理插g

插g可通过内部的Openfire理控制台来理. 你也可以在Q何时候通过删除插g的JAR文g来手工删除一个插?当你q么q了QOpenfire从内存自动U除q个插gq删除它的目?.



hoojo 2012-05-13 15:21 发表评论
]]>
վ֩ģ壺 97ԭѹۿ| ۺAV| þùƷۺ| AVһ | װɫƵ| ۺ| ˾ҹƷƵ| ҹ| һëƬѿ| һѵӰ| ߹ۿ| ߹ۿһƬ| 91Ʒѹۿ| 1024ƷƵר| պѸƵ| ƵƬaaëƬ| ߹ۿƵ| ר| ۺAV߲| avһ| ޾ƷƬ| ɫƷһ| ޹ľƷ| ŮڵƵ| ƷһƵ߹ۿ| һ˿wwwƵ߹ۿ| þþþþëƬѲ| ߿ƬvѹۿƵ777 | պһѸ| һ߹ۿ| ĻƵ| ëƬaëƬѲ| avպavŷv| һƷ޶߲| Ļ޾ƷԴ| ޷ŮһŶ| 뾫Ʒþþ| ձһ| ձh߾Ʒѹۿ| ۲ӰԺƷַ| ÿĵӰվһ|