返回首页


我的工作项目,支持P2P文件传输和它然后当我想,为什么不使用,而不是从头开始建立一个新的现有框架。我曾斯曼克/的Openfire XMPP协议库大约6年前,再次为上述目的。
的Jabber / XMPP服务器,支持P2P文件传输协议和遵循的顺口溜规范。所以我想测试如何使用了咂嘴API构建在Java中的聊天客户端。本教程将说明从Flex / Flash的相同。
下面是一个示例代码,可以连接到GoogleTalk服务器和所有的朋友列表。这也显示了一个例子,如何给定的用户发送聊天消息。
这里是您需要了解,然后再开始使用XMPP库的一些术语。名册
名册的名字出现在一个人的聊天客户端的联系人列表。 Google Talk条款,这是你会看到,一旦你登录的朋友列表。名册中的元素是您的联系人。其中每个项目确定一个唯一的标识符称为JID(Jabber的标识符)。
名册存储在服务器上,使XMPP客户端可以检索他们每次用户登录消息
这是在XMPP的基本三节之​​一。 (其他两个是智商和存在。)由于它是明显,一个消息节是用于发送IMS(即时消息)。智商
这是另一个非常重要的的诗节。 IQ代表信息/查询。它类似于传统的请求/响应范式,如HTTP。一个IQ节可以四种类型之一,"?? "设置?? "的结果吗??或"错误??前两个是请求或查询,而在过去两年的答复或信息。一个IQ节可以包装各种元素。让我们来看看这样一个例子。
朱丽叶登录到她的XMPP客户端。客户端发送一个类型XMPP智商节"呢??gmail.com服务器请求她的名册。

<iq from=ashwin@gmail.com?/span> type=get?/span> id=roster_1?/span>> <query xmlns=jabber:iq:roster?> </iq>
的存在
这是第三节XMPP核心指定的类型。在外行的存在仅仅是指的可用性或接触的状态。
现在你熟悉一些基本术语,你会在库跨,我就开始粘贴一些代码,可以对GTtalk测试工作。
下面是一个示例的HelloWorld代码:{C}
下面是样品使用的实用工具类:
/**

 *

 */

package com.linkwithweb.demos;



import java.io.BufferedReader;

import java.io.File;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Collection;



import org.jivesoftware.smack.Chat;

import org.jivesoftware.smack.ConnectionConfiguration;

import org.jivesoftware.smack.MessageListener;

import org.jivesoftware.smack.Roster;

import org.jivesoftware.smack.RosterEntry;

import org.jivesoftware.smack.XMPPConnection;

import org.jivesoftware.smack.XMPPException;

import org.jivesoftware.smack.packet.Message;

import org.jivesoftware.smackx.filetransfer.FileTransferManager;

import org.jivesoftware.smackx.filetransfer.FileTransferNegotiator;

import org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer;



/**

 * API With some Utitlity Methods

 * @author Ashwin Kumar

 *

 */

public class JabberSmackAPI implements MessageListener {



    XMPPConnection connection;

    private FileTransferManager manager;



    public void setConnection(XMPPConnection connection) {



        this.connection = connection;

        manager = new FileTransferManager(connection);

    }



    public JabberSmackAPI() {

    }



    public void login(String userName, String password) throws XMPPException {

        ConnectionConfiguration config = new ConnectionConfiguration(

                "localhost", 5222, "Work");

        connection = new XMPPConnection(config);



        connection.connect();

        connection.login(userName, password);

    }



    public void fileTransfer(String fileName, String destination)

            throws XMPPException {



        // Create the file transfer manager

        // FileTransferManager manager = new FileTransferManager(connection);

        FileTransferNegotiator.setServiceEnabled(connection, true);

        // Create the outgoing file transfer

        OutgoingFileTransfer transfer = manager

                .createOutgoingFileTransfer(destination);



        // Send the file

        transfer.sendFile(new File(fileName), "You won't believe this!");

        try {

            Thread.sleep(10000);

        } catch (Exception e) {

        }

        System.out.println("Status :: " + transfer.getStatus() + " Error :: "

                + transfer.getError() + " Exception :: "

                + transfer.getException());

        System.out.println("Is it done? " + transfer.isDone());

    }



    public void sendMessage(String message, String to) throws XMPPException {

        Chat chat = connection.getChatManager().createChat(to, this);

        chat.sendMessage(message);

    }



    public void displayBuddyList() {

        Roster roster = connection.getRoster();

        Collection<RosterEntry> entries = roster.getEntries();



        System.out.println("\n\n" + entries.size() + " buddy(ies):");

        for (RosterEntry r : entries) {

            System.out.println(r.getName());

        }

    }



    public void disconnect() {

        connection.disconnect();

    }



    public void processMessage(Chat chat, Message message) {

        if (message.getType() == Message.Type.chat)

            System.out.println(chat.getParticipant() + " says: "

                    + message.getBody());

    }



    public static void main(String args[]) throws XMPPException, IOException {

        // declare variables

        JabberSmackAPI c = new JabberSmackAPI();

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String msg;



        // turn on the enhanced debugger

        XMPPConnection.DEBUG_ENABLED = true;



        // Enter your login information here

        c.login("ashwin", "ashwin@123");



        c.displayBuddyList();



        System.out.println("-----");



        System.out.println("Who do you want to talk to?" + 

               " - Type contacts full email address:");

        String talkTo = br.readLine();



        System.out.println("-----");

        System.out.println("All messages will be sent to " + talkTo);

        System.out.println("Enter your message in the console:");

        System.out.println("-----\n");



        while (!(msg = br.readLine()).equals("bye")) {

            c.sendMessage(msg, talkTo);

        }



        c.disconnect();

        System.exit(0);

    }

}

您可以从SVN检出上述项目,并测试它自己。与Jabber的乐趣。

回答

评论会员:史密瑟斯-琼斯 时间:2012/01/27
Попробуйтеещеразнаанглийскомязыке,есливыдействительноожидатьнекоторуюпомощь
/
在英国再次尝试,如果你真的希望有所帮助!

[南航评论:]

Попробуйтеещеразнаанглийскомязыке,есливыдействительноожидатьнекоторуюпомощь

[Попробуйтеещераз,нонаанглийскомязыке,есливыдействительнорассчитиваетеполучитькакуюлибопомощьmdash; SA]

[电脑翻译人员,这些都是完全无法工作,与俄罗斯的文体;代,甚至语法正确的条款,完全超出了他们的能力,即使是这样一个简单的例子。 mdash; SA]
评论会员:SAKryukov 时间:2012/01/27
在Windows中的一切都是通过这些消息通信

{A}

您将无法与他们合作,没有基本的Windows架构的理解。找到任何原始的Windows编程的书
对于消息的基本思路,看到:

{A3}]

您将可以在任何语言的邮件列表中找到的Windows API的源代码。
您也可以在这里找到它:
{A4}

当你知道的消息(这是一个在SendMessage或PostMessage的第二个参数)命名的,你可以得到帮助每一个特定的消息ID会告诉你消息的其他参数的意义和设置。

mdash; SA
评论会员:SAKryukov 时间:2012/01/27
你可能想借此帮助的人都知道一些英语
即使翻译之后,它是没有多大意义。

尝试转载指导,我相信会有人帮你在这里.
评论会员:游客 时间:2012/01/27
Менятожезаинтересовалооконноесообщение0xc0b4,впервыеувиделегоподсемеркойВотэто"0xc0b4,L"。Registred:TaskBarButtonCreated"-явыдралСпомощью间谍Ядумаю,тобойобозначеносемействорегистрируемыхсообщений。То,что0xc0​​b4регистрируется(RegisterWindowMessage)самойсистемой-Уменяневызываетсомнений,комупринадлежатостальные-несмотрел。Удачи,земляк=)
RUS_DWORD
评论会员:游客 时间:2012/01/27
咄,愚蠢的我...{S0}我通常程序的WinForms,这是我在Silverlight中的第一个应用程序,所以它需要一个习惯的位(很多)。我倾向于忘记样式,因为我已经习惯了一切,做一个控制类控制本身。感谢了很多设置我直。有另外5个。imgsrc=http://www.orcode.com/img/ico/smiley_wink.gif为什么我不能像约翰适用?-我,2011年4月{BR}-----Beidh企之窗,caint阿古斯畅饮againn-肖恩禁止布雷斯纳克{BR}-----大mihiSIScrustumEtruscum暨综合在EO{BR!}-----只是因为一个东西是新的不意味着它是更好-1932年9月4日,威尔罗杰斯