jabber服务器搭建_jabber无法连接服务器

hacker|
98

文章目录:

怎么将ejabber部署到服务器上

从出口业务人员的角度来看,出口托运是从租船订舱或是委托出运开始的。 首先,外贸业务人员应根据信用证规定的最迟装运期及货源和船源情况安排委托出运。一般情况应提前5天左右或更长,以便留出机动时间应付意外情况发生。 接下来,填具货物出运...4739

如何用java开发基于jabber的IM软件

Jabber对于即时消息是一个开放的、基于XML的数据模型和协议。联系不断增加的基于Jabber开放资源和商业产品的数目,这种协议提供了摆脱即时消息服务器所有权束缚的一种方法。多种多样的开放资源Java APIs能够帮助你建立基于Jabber的服务器并将即时消息整合到你的应用程序中去。在这篇文章中专门阐述了这一点。

即时消息作为个人——个人通迅工具取得了显著的成功。在有些地方它已经作为在线联系的首选方法取代了email。现在,开发者正将这一技术应用到应用程序——个人和应用程序——应用程序通迅上。

直到最近,也只有少数服务提供商掌握了这一技术。通常流行的即时消息服务是建立在所有权协议基础上的通迅孤岛。实施面临一个困难的决策:支持多协议或锁定到一个单独的。不管哪种选择,实现都必须依赖一个属于即时消息(IM)服务提供商的服务器。

开放式协议能够帮助开发者摆脱所有权陷阱。其优势有多种:开放协议鼓励竞争实现的发展(一些开放资源)。他们鼓励广泛采用一种公共协议,这样可以阻止通迅孤岛和服务供应的孤立主义方法的发展。用多种方法,开放协议使因特网成为可能。在即时消息领域,开放协议确保封闭系统及协议不会阻碍基于IM服务器的发展的互操作性。

Jabber是一种针对即时消息和现场服务的开放协议。作为一个公共协议的最主要的侯选者,Jabber有潜力打破所有权在即时消息服务的控制。

这篇文章将解释如何实践发送简单Jabber消息和开发一个简单的基于开放标准及开放资源APIs和产品的布告服务器。

为什么使用Jabber?

Jabber标准和结构帮助创建一个分布式的IM系统,使人联想到分布在因特网上的email系统,用户在本地连接到这些系统。这个方法直接与象AIM(AOL即时信使)、ICQ、MSN(Microsoft网络)及Yahoo这样的流行服务提供商提供的单一系统结构作对,在那里一个单独的中央服务器或集中服务器组提供消息服务。Jabber在其他情形也类似于email结构:Jabber使用一个几乎与基本SMTP(简单邮件传输协议)方案一样的地址方案确定它的终点(人,机器,软件)地址。例如,myname@elogex.com是一个有效的Jabber地址,或使用Jabber说法叫JID(Jabber ID)。因为这些原因,基于Jabber的系统衡量起来好于已存在的专有系统。加之,对于专有即时消息服务的网关允许的协议是必需的。

多种多样的Jabber服务器,包括我们在这篇文章中使用的其中之一,都是自由可使用的,意思就是说你不再需要依赖一个第三方IM服务提供商(第三方Jabber服务对于那些要求第三方主机服务的来说也是有用的)。

标准化

当讨论Jabber标准的益处时,我应该提及IETF IM标准的工作。在写这篇文章时,其IMPPWG(即时消息和现场协议工作组)已有多个RFC有效,其中最重要的是:

·RFC 2778:现场和即时消息模型

·RFC 2779:即时消息/现场协议要求

IMPPWG已经起草了一个名叫CPIM(公共现场和即时消息)协议的因特网标准。Jabber协议也是一个草拟的因特网标准,但不是IMPPWG工作的部份。

Jabber在哪儿适合这一标准工作呢?依照Jabber网站,Jabber是“承诺完全支持任何开放实时消息协议,包括IETF协议”。如果当对于这个IETF协议的支持增长时,Jabber打算将自己定位为IETF协议的领导开放资源的平台。到目前为止,IETF的工作更多地主要集中在收集要求上而不是执行。暂时,Jabber仅是一个带有重要开放资源支持的开放即时消息和现场服务协议。结果,它成为开放即时消息事实上的标准。

另一个值得密切注意的竞争对手是Sun微系统的Jxta协议,另一个基于XML针对peer-to-peer(P2P)应用程序开发者的协议。各种各样的Jxta实施在今天已经能够被提供。但是,由于其起源相对较近,Jxta比起Jabber只有很少的牵引力。

下载并安装

要开始使用Jabber,你首先需要下载必要的工具:你需要一个Jabber服务器,一个Jabber客户端,一个帮助管理和隐藏一些复杂socket处理的API,XML语法分析,消息创建等等。

Jabber服务器

为了运行Jabber,你选择的Jabber服务器不能有问题,自从他们都接受了标准Jabber XML及与终端应用程序通迅以释放负荷,其也是标准Jabber XML。Jabberd,最初的Jabber服务器,是开放资源(但不是基于Java),安装配置简单并在多数平台上都有效,包括Unix、Linux、Windows和Mac OS X。JabaServer开放资源方案也值得提及,但现在,这些基于Java的方案仍不如Jabberd成熟。同时,JabaServer安装不怎么简单易懂,因为你必须下载、安装并配置一个第三方数据库,加上创建必需的数据库规划。

对于这篇文章的例子,我选择Jabberd。当二进制及源下载对于jabberd都有效时,我就不在这儿描述怎样建立一个源发布。除非你真想自己编译,可以从jabberd 主页下载二进制发布。在Windows平台上安装是相对容易的。发布是一个.exe程序,按照安装向导一步一步执行。

安装完成后,你无需配置。在Windows2000,不要求配置。只要双击二进制程序就可启动服务器。

用户代理/客户

我决定使用Exodus客户端,对于这个方案这是另一个开放资源技术。我尤其喜欢Exodus的调试标签,可以允许你正确地查看客户发送和接收的XML。另外你能够作为纯粹的XML键入Jabber消息并将它们发送给服务器。所有这些都证明用Jabber协议和服务器测试的有用性。

Exodus的安装简单易懂。下载Exodus 压缩文件(我在文章中使用的是0.6版本)。将文件直接解压到你想要安装客户端的目录。在这个版本中,文件是些简单的二进制文件和一个.dll文件。你可以从 Muse 主页下载Muse API。

发送你的第一个Jabber消息

要发送一个Jabber即时消息,你必须初始化Muse Jabber API。通过创建一个JabberContext 类的实例来完成,接下来使用内容作为一个参数到Jabber session factory类的createSession()方法:

1 //初始化Jabber context

2 JabberContext jabberContext = new JabberContext("user", "pass", "localhost");

4 //创建一个Jabber session factory的实例

5 Jabber jabber = new Jabber();

6 //创建新会话

7 JabberSession jabberSession = jabber.createSession(jabberContext);

上面的例子在第2行显示了一个新context的创建。JabberContext存储了指定的用户相关信息(用户名、密码、用户地址)以及稍后要使用context建立session时包含的一个唯一的会话标识。为了阐述意图,我直接使用了username、password和server。

在第5行,一个Jabber session factory被创建,我们在第7行使用它创建了一个新的JabberSession,Muse进入由Jabber服务器提供的服务的主要接口。服务器的主要服务是:

·连接服务: 从Jabber服务器连接和断开

·用户服务: 针对用户鉴定及注册

·现场服务: 接收从其它用户/服务来的及你自己广播的现场信息

·登记表服务: 密友列表或地址薄

·聊天服务: 发送多种类型的消息—组聊、私聊、标题等等

·服务器服务: 获得与由这个Jabber服务器提供的服务相关的信息

·客户服务: 获得关于其他用户的信息,比如用户登录的最后时间

现在我们已经有了一个已经初始化的Jabber session,我们能够用它在我们才创建的JabberSession对象中使用connect()方法去连接到Jabber 服务器:

8 //连接到服务器

9 jabberSession.connect("localhost", 5222);

要连接到一个Jabber服务器,我们指定地址及在指定服务器上的机器端口号。标准来说,缺省Jabber端口是5222。

现在JabberSession已经连接到服务器,我们能够在我们的服务中用login()方法登录:

10 //登录到Jabber服务器

11 jabberSession.getUserService().login();

在第11行,我们使用JabberSession获得一个到UserService的引用,接下来在我们服务中调用login()方法。注意方法自身不指定任何用户信息。当在上面第7行JabberSession被创建时login()从与JabberSession相关的JabberContext中获得这些信息。

现在我们已经成功登录到Jabber服务器,我们能够开始发送和接收消息。下面代码段显示了如何构造一个简单的标题风格的消息:

12 //构造测试消息

13 JabberChatMessage msg = new

14 JabberChatMessage(JabberChatMessage.TYPE_HEADLINE);

15 msg.setSubject("Hello world");

16 msg.setBody("Hello world");

17 msg.setTo("user2@localhost");

在第13行,我们创建了一个JabberChatMessage实例。单个参数指定了我们要求的消息类型:TYPE_HEADLINE。JabberChatMessage类的名字容易引起误解,实际上,它可以用来包含在Jabber协议中定义的消息的任何四种类型—普通、聊天、标题及错误。在第15行,setSubject()和setBody()分别指定主题和内容。最后,setTo()在第17行设置消息接收器的JID。

在封装下,JabberChatMessage将所有这些信息转换成一个内在的DOM(文档对象模型)树,这样当我们已经准备好发送消息给Jabber服务器时能够轻松产生XML。

最后步骤:用sendMessage()方法发送消息:

18 //发送消息

19 jabberSession.sendMessage(msg);

在封装下

依据上面例子所得的事实,Muse API有效地隐藏了与连接管理和XML语法分析有关的所有细节,因此允许你集中精力在手边的任务上:创建一个消息服务。然而,理解一些基础协议交换证明是有用的。让我们关注一下当我们连接到服务器时发生的XML交换,登录,并象上面代码描述的一样发送消息。在下面的XML交换中,被客户接收的消息(我们例子代码)带了RECV前缀,送到服务器的消息带有SEND前缀:

SEND: ?xml version="1.0" encoding="UTF-8" ?

stream:stream to="localhost"

xmlns="jabber:client"

xmlns:stream=""

RECV: stream:stream from="localhost" id="3D160545"

所有的Jabber交换都发生在一个XML流的上下文。在我们客户与Jabber服务器之间连接的生命期间,两个完全的XML文档在一个时间传输一个片段。上面显示的最初交换允许客户开始发送XML流文档到服务器并且服务器开始发送XML流文档到客户。

下面,一个要求鉴定的信息被发送给服务器:

SEND: iq xmlns="jabber:client" type='get' id='id_10028'

query xmlns="jabber:iq:auth"

usernameuser/username

/query

/iq

RECV: iq xmlns="jabber:client" type='result' id='id_10028'

query xmlns="jabber:iq:auth"

usernameuser/username

password /

digest/

sequence482/sequence

token3D15E63A/token

resource /

/query

/iq

在用户鉴定程序前述那段显示了第一次交换。开始,客户向服务器询问哪种鉴定方式对于给定用户是有效的。服务器段用下面的鉴定方法回答:

·Plain 文本:password /标签

·零知识鉴定:使用sequence和token标签

·digest/:象plain文本,但密码是SHA-1 (安全无序运算法则)-用用户的plain文本密码进行编码

我们实际上使用digest/,象下面代码段描述的一样:

SEND: iq xmlns="jabber:client" type='set' id='id_10030'

query xmlns="jabber:iq:auth"

usernameuser/username

hash425c73373237061edcc5f23ba239c6cc69556f5c/hash

resourceHome/resource

/query

/iq

RECV: iq xmlns="jabber:client" type='result' id='id_10030'/iq

在这一点,用户连接到服务器并能够开始发送和接收消息:

SEND: message xmlns="jabber:client" type='headline'

id='id_10032' to='user2@localhost'

thread xmlns="jabber:client"id_10033/thread

subject xmlns="jabber:client"Hello world/subject

body xmlns="jabber:client"Hello world/body

/message

上面片段显示了我们发送给接收者user2@localhost的测试标题消息。

你可能已经注意到在前述协议段有一个重复出现元素:ID标签。因为session能够由多个异步会话组成,ID标签匹配查询并响应。

接收消息

自从这篇文章的主要方向是向你显示如何开发一个报警系统,我就很少注意消息接收。然而,为了完整性的利益,我应该讨论在Muse API中处理接收消息的一些有用特性。另外,因为报警服务是被登录到Jabber服务器的用户执行的,你能够适当地期望一些消息接收者试图与发送者通信。

Muse使用一个listener附在session上以接收进入消息的提示。下面代码显示了如何创建一个listener并将其附到session——listener实际上附加到连接上,但自从我们的接口是在session级别并且JabberSession类有一个便利的方法添加一个listener,我们就将其附加到session:

1 jabberSession.addMessageListener(

2 new JabberMessageListener() {

3 public void messageReceived(JabberMessageEvent event) {

4 if (event.getMessageType() == JabberCode.MSG_CHAT ) {

5 JabberChatMessage msg =

6 (JabberChatMessage)event.getMessage();

7 JabberChatMessage reply = new

8 JabberChatMessage(JabberChatMessage.TYPE_HEADLINE);

9 reply.setTo(msg.getFrom());

10 reply.setSubject("Re: "+msg.getSubject());

11 reply.setBody(

12 "I'm just a sender: please send messages to someone else");

13

14 //发送消息

15 jabberSession.sendMessage(reply);

16 }

17 }

18 }

19 );

客户能够添加几个消息listeners,每次一个消息被接收它们都要被调用。典型的,你为要处理的每一个类型的消息添加一个listener。另一个选择:为同一种消息类型但在那些消息中的每一种不同的行为添加多个listeners。然而另一种选择将添加一个要处理所有消息类型的listener。选择依赖于你想完成什么。

在上面的例子中,一个单独的listener被附加。Listener必须是实现JabberMessageListener接口的类的一个实例。这个接口要求一个要被执行的单个方法: void messageReceived(JabberMessageEvent)。当一个消息从服务器被接收时这个方法将被调用。在例子代码中,messageReceived()方法首先检查在第4行接收的消息类型。自从Jabber用户代理使用了MSG_CHAT类型发送消息,就只对这种类型消息才感兴趣。在第5行,Jabber消息从JabberMessageEvent 提取。在第9行通过设置收件人接收消息被用来构成一个给消息发送者的回复并且在第10行拷贝接收消息的主题。一个缺省错误文本被作为消息体在第11行被设置,并且,在第15行,消息使用前面例子同样的方法利用JabberSession对象的sendMessage()方法传输。

试试Jabber

这篇文章提供了一个对于Jabber协议及少量你能够将这一技术应用到你的应用程序中去的开放资源方案的基本介绍。对这个协议有用的应用程序多种多样,并不限于传统P2P感觉的即时消息领域。例如,jogger.jabber.org提供的Jogger,一个允许你通过发送一个消息给Weblog应用程序(blog)就能更新个人网络杂志的有趣服务。Jabber在用户服务应用程序及其它结构的协作类型应用程序同样有很大的影响。

象上面例子所显示的一样,你使用一个API如Muse或JabberBeans在少许几行Java代码中就能够完成即时消息功能。记住我不能掩盖一些Jabber其它重要的特征,如现场服务和登记表管理,这些在使用时都是相关的。另一个重要的特征是Jabber服务器的模块性和可扩展性,它允许一个开发者创建新的服务直接整合进服务器。

windows 怎么用 jabber

你好,

1. 下载 Kitematic首先,我们需要从 github 仓库 中下载 Windows 操作系统可用的最新的 Kitematic 发行版。我们用下载器或者 web 浏览器下载了它的可执行 EXE 文件。下载完成后,我们需要双击可执行应用文件。

双击应用文件之后,会问我们一个安全问题,我们只需要点击 OK 按钮,如下图所示。

2. 安装 Kitematic

下载好可执行安装程序之后,我们现在就可以在我们的 Windows 操作系统上安装 Kitematic了。安装程序现在会开始下载并安装运行 Kitematic 需要的依赖软件,包括 Virtual Box 和 Docker。如果已经在系统上安装了 Virtual Box,它会把它升级到最新版本。安装程序会在几分钟内完成,但取决于你网络和系统的速度。如果你还没有安装 Virtual Box,它会问你是否安装 Virtual Box 网络驱动。建议安装它,因为它用于 Virtual Box 的网络功能。

所需的依赖 Docker 和 Virtual Box 安装完成并运行后,会让我们登录到 Docker Hub。如果我们还没有账户或者还不想登录,可以点击 SKIP FOR NOW 继续后面的步骤。

如果你还没有账户,你可以在应用程序上点击注册(Sign Up)链接并在 Docker Hub 上创建账户。

完成之后,就会出现 Kitematic 应用程序的第一个界面。正如下面看到的这样。我们可以搜索可用的 docker 镜像。

3. 部署 Nginx Hello World 容器

现在,成功安装完 Kitematic 之后,我们打算部署容器。要运行一个容器,我们只需要在搜索区域中搜索镜像。然后点击 Create 按钮部署容器。在这篇教程中,我们会部署一个小的包含了 Hello World 主页的 Nginx Web 服务器。为此,我们在搜索区域中搜索 Hello World Nginx。看到了容器信息之后,我们点击 Create 来部署容器。

镜像下载完成之后,它会自动部署。我们可以查看 Kitematic 部署容器的命令日志。我们也可以在 Kitematic 界面上预览 web 页面。现在,我们通过点击预览在 web 浏览器中查看我们的 Hello World 页面。

如果我们想切换到命令行接口并用它管理 docker,这里有个称为 Docker CLI 的按钮,它会打开一个 PowerShell,在里面我们可以执行 docker 命令。

现在,如果我们想配置我们的容器并执行类似更改容器名称、设置环境变量、指定端口、配置容器存储以及其它高级功能的任务,我们可以在容器设置页面做到这些。

总结

我们终于成功在 Windows 操作系统上安装了 Kitematic 并部署了一个 Hello World Ngnix 服务器。推荐下载安装 Kitematic 最新的发行版,因为会增加很多新的高级功能。由于 Docker 运行在 64 位平台,当前 Kitematic 也是为 64 位操作系统构建。它只能在 Windows 7 以及更高版本上运行。

google tlak如何整合MSN

在Gtalk中和你的msn,yahoo,icq/aim,qq好友聊天

Friday, 4. August 2006, 12:25:41

gtalk

2006年1月17日,Google支持服务器互相通讯,可与任何支援dialback协议的Jabber服务器“结盟”(federate,此术语即服务器互通之意)。

--维基百科

Gtalk(Google Talk)的界面给人一种简洁,清爽的感觉,而且最新测试版本增加了文件传输,语音留言等功,显示音乐状态等新功能,这样我不得不爱上Gtalk了。更绝的是gtalk使用的是开源的jabber通信协议,而不象msn,yahoo,icq等使用的自我的封闭和通讯协议,这就使得我们不光可以在其实jabber客户端上登陆使用gtalk,而且可以利用这一点将msn,yahoo,icq全部整全到gtalk里面,从此以后你就不用同时在电脑上开N多IM,而只用开gtalk就全部搞定,屌!

先简单谈一下原理,两个jabber客户端通讯的路线是Jabber Client-Jabber Server1-Jabber Server2-Jabber Client,jabber客户端和其实IM如MSN,YAHOO,ICQ的通讯原理为Jabber Client-Jabber Server1-Jabber Server2-Other IM Client(eg,MSN,YAHOO,ICQ),如果你用gtalk和msn通讯,则整修过程是,gtalk将你的消息传送到jabber server1(gmail.com),gmail.com再将消息转发到网络上一些为msn搭建的jabber sever2,jabber sever2再将消息转发到目标msn,整个过程结束。

下面介绍怎样利用jabber客户端Psi将你的msn,yahoo,aim/icq,qq好整合到Gtalk中,此设置过程要用到Psi,之后就不用开Psi了,只需开gtalk就能和msn好友聊了。

首选当然是安装好Psi,最新版本的Psi下地址为

安装完成后,点这里参照google talk官方帮助文件里的设置(已经够详细了)将你的gtalk帐号设置成缺省登陆帐号,然后登陆你的帐号状态为"online".

点击Psi左下角的系统菜单中的"Service Discovery"寻找jabber服务器,在所弹出窗口的"Address"栏填上jabber服务器地址如jabbernet.dk,后面的 "Node"可以不用选,然后点"Browse",下面就会显示支持的IM的jabber服务器地址。

jabber服务器参考地址: jabbernet.dk

jaim.at

bgmn.net

freelinq.com

jabber官方网站有公布更多的服务器地址,大家可以尝试

以msn为例,在msn上点右键然后先"Register",在弹出的对话框中填上你相应的信息即你的msn帐号和密码,如果登陆成功的话会有"successful"的提示,

同时你的Psi好友名单下面的"Agents/Transports"会有显示此msn的jabber服务器地址,而且图标为亮,表示登陆正常。你的msn 好友也会显示在你的Psi好友栏里面,而且可以看到其ID的后面会跟一串类似"@msn.jabbernet.dk"的东西,其实这个就是jabber服务器地址啦。

好,现在可以退出Psi,登陆你的Gtalk,会收到一个有人想加你为好友的消息,点"show requests",接下来全部点"yes",这样你的msn好友就全部添加到人的Gtalk上了,现在你就可以直接和你的msn好友聊天啦!(历史性的一刻)

用同样的方法可以将yahoo messenger,icq/aim,qq的好友全部添加到Gtalk中。特别一点的是QQ,它的jabber服务器是freelinq.com 由北京一网络公司开发,鉴于腾讯公司严历打击QQ第三方的连接插件,功能没敢做得太全,你加上去后不会在Gtalk中显示你的QQ好友,但当你QQ好友给你发信息的时候你会收复到,而且能够回复(可以利用这个挂QQ,但我个人不支持)。

还有点小经验要和大家分享,当我们将msn,yahoo,icq,aim加上去后,gtalk上的好友可能会太多而不好区分哪些是msn好友,哪些是 yahoo好友,好在gtalk有强在的搜索功能,在搜索框中输入"msn."(不包括引号)就会显示所有msn好友,同样输入"yahoo."会显示所有yahoo好友。(这个功能可是不小心发现的咧)

:coffee: 在搜索框中输入"%"(不包括引号)也会显示所有msn好友列表,这跟输入"msn."的效果一样,但对于yahoo,icq/aim,qq就没有发现其它更简单的方法了。

图片贴不上来,参考

1条大神的评论

  • avatar
    访客 2022-07-08 上午 12:10:36

    许几行Java代码中就能够完成即时消息功能。记住我不能掩盖一些Jabber其它重要的特征,如现场服务和登记表管理,这些在使用时都是相关的。另一个重要的特征是Jabber服务器的模块性和可扩展性,它允许一个开发者创建新的服务直接整合进服务器

发表评论