asmack文件传输

使用socket5方式接受文件
1、建立xmpp连接之前设置


public void configure(ProviderManager pm) {

    // Private Data Storage
    pm.addIQProvider("query", "jabber:iq:private",
            new PrivateDataManager.PrivateDataIQProvider());

    // Time
    try {
        pm.addIQProvider("query", "jabber:iq:time",
                    Class.forName("org.jivesoftware.smackx.packet.Time"));
    } catch (ClassNotFoundException e) {
        Log.w("TestClient",
                "Can't load class for org.jivesoftware.smackx.packet.Time");
    }

    // Roster Exchange
    pm.addExtensionProvider("x", "jabber:x:roster",
            new RosterExchangeProvider());

    // Message Events
    pm.addExtensionProvider("x", "jabber:x:event",
            new MessageEventProvider());

    // Chat State
    pm.addExtensionProvider("active",
            "http://jabber.org/protocol/chatstates",
            new ChatStateExtension.Provider());
    pm.addExtensionProvider("composing",
            "http://jabber.org/protocol/chatstates",
            new ChatStateExtension.Provider());
    pm.addExtensionProvider("paused",
            "http://jabber.org/protocol/chatstates",
            new ChatStateExtension.Provider());
    pm.addExtensionProvider("inactive",
            "http://jabber.org/protocol/chatstates",
            new ChatStateExtension.Provider());
    pm.addExtensionProvider("gone",
            "http://jabber.org/protocol/chatstates",
            new ChatStateExtension.Provider());

    // XHTML
    pm.addExtensionProvider("html", "http://jabber.org/protocol/xhtml-im",
            new XHTMLExtensionProvider());

    // Group Chat Invitations
    pm.addExtensionProvider("x", "jabber:x:conference",
            new GroupChatInvitation.Provider());

    // Service Discovery # Items
    pm.addIQProvider("query", "http://jabber.org/protocol/disco#items",
            new DiscoverItemsProvider());

    // Service Discovery # Info
    pm.addIQProvider("query", "http://jabber.org/protocol/disco#info",
            new DiscoverInfoProvider());

    // Data Forms
    pm.addExtensionProvider("x", "jabber:x:data", new DataFormProvider());

    // MUC User
    pm.addExtensionProvider("x", "http://jabber.org/protocol/muc#user",
            new MUCUserProvider());

    // MUC Admin
    pm.addIQProvider("query", "http://jabber.org/protocol/muc#admin",
            new MUCAdminProvider());

    // MUC Owner
    pm.addIQProvider("query", "http://jabber.org/protocol/muc#owner",
            new MUCOwnerProvider());

    // Delayed Delivery
    pm.addExtensionProvider("x", "jabber:x:delay",
            new DelayInformationProvider());

    // Version
    try {
        pm.addIQProvider("query", "jabber:iq:version",
                Class.forName("org.jivesoftware.smackx.packet.Version"));
    } catch (ClassNotFoundException e) {
        // Not sure what's happening here.
    }

    // VCard
    pm.addIQProvider("vCard", "vcard-temp", new VCardProvider());

    // Offline Message Requests
    pm.addIQProvider("offline", "http://jabber.org/protocol/offline",
            new OfflineMessageRequest.Provider());

    // Offline Message Indicator
    pm.addExtensionProvider("offline",
            "http://jabber.org/protocol/offline",
            new OfflineMessageInfo.Provider());

    // Last Activity
    pm.addIQProvider("query", "jabber:iq:last", new LastActivity.Provider());

    // User Search
    pm.addIQProvider("query", "jabber:iq:search", new UserSearch.Provider());

    // SharedGroupsInfo
    pm.addIQProvider("sharedgroup",
            "http://www.jivesoftware.org/protocol/sharedgroup",
            new SharedGroupsInfo.Provider());

    // JEP-33: Extended Stanza Addressing
    pm.addExtensionProvider("addresses",
            "http://jabber.org/protocol/address",
            new MultipleAddressesProvider());

    // FileTransfer
    pm.addIQProvider("si", "http://jabber.org/protocol/si",
            new StreamInitiationProvider());

    pm.addIQProvider("query", "http://jabber.org/protocol/bytestreams",
            new BytestreamsProvider());

    // Privacy
    pm.addIQProvider("query", "jabber:iq:privacy", new PrivacyProvider());
    pm.addIQProvider("command", "http://jabber.org/protocol/commands",
            new AdHocCommandDataProvider());
    pm.addExtensionProvider("malformed-action",
            "http://jabber.org/protocol/commands",
            new AdHocCommandDataProvider.MalformedActionError());
    pm.addExtensionProvider("bad-locale",
            "http://jabber.org/protocol/commands",
            new AdHocCommandDataProvider.BadLocaleError());
    pm.addExtensionProvider("bad-payload",
            "http://jabber.org/protocol/commands",
            new AdHocCommandDataProvider.BadPayloadError());
    pm.addExtensionProvider("bad-sessionid",
            "http://jabber.org/protocol/commands",
            new AdHocCommandDataProvider.BadSessionIDError());
    pm.addExtensionProvider("session-expired",
            "http://jabber.org/protocol/commands",
            new AdHocCommandDataProvider.SessionExpiredError());
}

2、建立文件接收监听


ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(xmppConnection);
    if (sdm == null)
        sdm = new ServiceDiscoveryManager(xmppConnection);
    sdm.addFeature("http://jabber.org/protocol/disco#info");
    sdm.addFeature("jabber:iq:privacy");
     manager = new FileTransferManager(xmppConnection);
    FileTransferNegotiator.setServiceEnabled(xmppConnection, true);



public void fileTransferRequest(FileTransferRequest request) {
    // TODO Auto-generated method stub
    IncomingFileTransfer transfer = request.accept();
    try {
        transfer.recieveFile(new File("/mnt/sdcard/" + request.getFileName()));
    } catch (XMPPException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

3、流文件


       <?xml version="1.0" encoding="UTF-8"?>

<iq id=“27P75-135” to=“test1@domain/Smack” from=“test2@domain/Spark 2.6.3”

type="set">
<si xmlns="http://jabber.org/protocol/si" id="jsi_5939530819184472516"
    profile="http://jabber.org/protocol/si/profile/file-transfer">
    <file xmlns="http://jabber.org/protocol/si/profile/file-transfer"
        name="手机型号.xls" size="24064">
        <desc>Sending</desc>
    </file>
    <feature xmlns="http://jabber.org/protocol/feature-neg">
        <x xmlns="jabber:x:data" type="form">
            <field var="stream-method" type="list-single">
                <option>
                    <value>http://jabber.org/protocol/bytestreams</value>
                </option>
                <option>
                    <value>http://jabber.org/protocol/ibb</value>
                </option>
            </field>
        </x>
    </feature>
</si>


<iq id=“27P75-135” to=“test2@domain/Spark 2.6.3” from=“test1@domain/Smack”

type="result">
<si xmlns="http://jabber.org/protocol/si">
    <feature xmlns="http://jabber.org/protocol/feature-neg">
        <x xmlns="jabber:x:data" type="submit">
            <field var="stream-method">
                <value>http://jabber.org/protocol/bytestreams</value>
                <value>http://jabber.org/protocol/ibb</value>
            </field>
        </x>
    </feature>
</si>


<iq id=“27P75-135” to=“test2@domain/Spark 2.6.3” from=“test1@domain/Smack”

type="result">
<si xmlns="http://jabber.org/protocol/si">
    <feature xmlns="http://jabber.org/protocol/feature-neg">
        <x xmlns="jabber:x:data" type="submit">
            <field var="stream-method">
                <value>http://jabber.org/protocol/bytestreams</value>
                <value>http://jabber.org/protocol/ibb</value>
            </field>
        </x>
    </feature>
</si>


<iq id=“27P75-136” to=“test1@domain/Smack” type=“get”

from="test2@domain/Spark 2.6.3">
<query xmlns="http://jabber.org/protocol/disco#info" />


<query xmlns="http://jabber.org/protocol/disco#info">
    <identity category="client" name="Smack" type="pc" />
    <feature var="jabber:iq:privacy" />
    <feature var="http://jabber.org/protocol/si/profile/file-transfer" />
    <feature var="http://jabber.org/protocol/disco#items" />
    <feature var="http://jabber.org/protocol/ibb" />
    <feature var="http://jabber.org/protocol/si" />
    <feature var="http://jabber.org/protocol/bytestreams" />
    <feature var="http://jabber.org/protocol/disco#info" />
</query>


<iq id=“27P75-140” to=“test1@domain/Smack” type=“set”

from="test2@domain/Spark 2.6.3">
<query xmlns="http://jabber.org/protocol/bytestreams" sid="jsi_5939530819184472516"
    mode="tcp">
    <streamhost jid="proxy.domain" host="192.168.21.183"
        port="7777" />
</query>


<query xmlns="http://jabber.org/protocol/bytestreams">
    <streamhost-used jid="proxy.domain" />
</query>


<query xmlns="http://jabber.org/protocol/bytestreams">
    <streamhost-used jid="proxy.domain" />
</query>

你可能感兴趣的:(asmack文件传输)