Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Asmack文件发送错误503 Type=使用openfire取消_Java_Android_Asmack - Fatal编程技术网

Java Asmack文件发送错误503 Type=使用openfire取消

Java Asmack文件发送错误503 Type=使用openfire取消,java,android,asmack,Java,Android,Asmack,登录码。登录成功 String host=AppContext.HOST;//myHost String [] params={"a1","aa"} int port=AppContext.PORT;//My Port 2777 String service=AppContext.SERVICE; //service = smack ConnectionConfiguration connConfig = new

登录码。登录成功

        String host=AppContext.HOST;//myHost
        String [] params={"a1","aa"}
        int port=AppContext.PORT;//My Port 2777
        String service=AppContext.SERVICE;  //service = smack
        ConnectionConfiguration connConfig = new ConnectionConfiguration(
                host, port, service);
        connConfig.setDebuggerEnabled(true);
            Connection.DEBUG_ENABLED = true;
     connConfig.setSASLAuthenticationEnabled(true);
    XMPPConnection connection = new XMPPConnection(connConfig);
        Log.e("XMPP LoginActivity Username ",params[0]+" pass "+params[1]);
        try {
            connection.connect();
            connectionFlg=true;
            Log.i("XMPP LoginActivity",
                    "Connected to " + connection.getHost());
        } catch (XMPPException ex) {
            Log.e("XMPP LoginActivity", "Failed to connect to "
                    + connection.getHost());
            Log.e("XMPP LoginActivity", ex.toString());
            appContext.setConnection(null);
        }
        try {
            if(connectionFlg)
            {
            connection.login(params[0], params[1]);
            Log.i("XMPP LoginActivity",
                    "Logged in as " + connection.getUser());

            Presence presence = new Presence(Presence.Type.available);
            presence.setStatus("I’m available");
            connection.sendPacket(presence);
            loginFlg=true;
            appContext.setConnection(connection);
            }else
            {
                Log.e("XMPP LoginActivity", "Failed to connect to "
                        + connection.getHost());
            }

        } catch (XMPPException ex) {
            loginFlg=false;                     ;
            Log.e("XMPP LoginActivity", "Failed to log in as "
                    + params[0]);
            Log.e("XMPP LoginActivity", ex.toString());
            appContext.setConnection(null);
        }
我的文件发送代码如下

public void sendFile(String sentTo) {
    ProviderManager.getInstance().addIQProvider("query","http://jabber.org/protocol/bytestreams", new BytestreamsProvider());
    ProviderManager.getInstance().addIQProvider("query","http://jabber.org/protocol/disco#items", new DiscoverItemsProvider());
    ProviderManager.getInstance().addIQProvider("query","http://jabber.org/protocol/disco#info", new DiscoverInfoProvider());

    FileTransferManager manager = new FileTransferManager(connection);
    OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(sentTo);
    File file = new File(Environment.getExternalStorageDirectory()
            .getPath() + "/user.json");
    try {
       transfer.sendFile(file, "test_file");
    } catch (XMPPException e) {
       e.printStackTrace();
    }
    while(!transfer.isDone()) {
       if(transfer.getStatus().equals(Status.error)) {
          System.out.println("ERROR!!! " + transfer.getError());
       } else if (transfer.getStatus().equals(Status.cancelled)
                        || transfer.getStatus().equals(Status.refused)) {
          System.out.println("Cancelled!!! " + transfer.getError());
       }
       try {
          Thread.sleep(1000L);
       } catch (InterruptedException e) {
          e.printStackTrace();
       }
    }
    if(transfer.getStatus().equals(Status.refused) || transfer.getStatus().equals(Status.error)
     || transfer.getStatus().equals(Status.cancelled)){
       System.out.println("refused cancelled error " + transfer.getError());
    } else {
       System.out.println("Success");
    }

}
发送时,我得到以下两个xml响应。请看一看

(一)

12:55:16下午发送(1092826504):测试_filehttp://jabber.org/protocol/bytestreamshttp://jabber.org/protocol/ibb
(二)

12:55:16 PM RCV(1092826504):测试_filehttp://jabber.org/protocol/bytestreamshttp://jabber.org/protocol/ibb

请朋友们帮忙。我试过很多代码片段。因为我只做了三天:(

我也有同样的问题,我调查了这一节,并以这种方式解决了它

许多人使用“/Smack”“/Resource”作为jid中的资源部分,但也可以通过另一种方式进行配置

资源路径随着用户的每个状态更改而更改。假设我们要将图像发送到此用户: ”user1@mydomain“

您必须将“/Resource”部分添加到此jid,它将变成: user1@mydomain/资源

但是/Resource路径会随着状态的变化而变化,所以您必须遵循每个状态的变化来更新资源路径。 最好的方法是在花名册侦听器中获取用户状态,并在presenceChanged()方法中获取最后一个用户资源部分,如下所示:

Roster roster=getRoster();
roster.addRosterListener(new RosterListener() {
                @Override
                public void entriesAdded(Collection<Jid> addresses) {
                    Log.d("entriesAdded", "ug");
                    context.sendBroadcast(new Intent("ENTRIES_ADDED"));
                }

                @Override
                public void entriesUpdated(Collection<Jid> addresses) {
                    Log.d("entriesUpdated", "ug");
                }

                @Override
                public void entriesDeleted(Collection<Jid> addresses) {
                    Log.d("entriesDeleted", "ug");
                }

                @Override
                public void presenceChanged(Presence presence) {
                    Log.d("presenceChanged", "ug");
                    //Resource from presence
                    String resource = presence.getFrom().getResourceOrEmpty().toString();
                    //Update resource part for user in DB or preferences
                    //...
                }
            });
}
EntityFullJid jid = JidCreate.entityFullFrom("user1@mydomain/6u1613j3kv"); 
OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(jid)
transfer.sendFile(new File("DirectoryPath"), "Description");
这意味着您必须按如下方式创建传出转账:

Roster roster=getRoster();
roster.addRosterListener(new RosterListener() {
                @Override
                public void entriesAdded(Collection<Jid> addresses) {
                    Log.d("entriesAdded", "ug");
                    context.sendBroadcast(new Intent("ENTRIES_ADDED"));
                }

                @Override
                public void entriesUpdated(Collection<Jid> addresses) {
                    Log.d("entriesUpdated", "ug");
                }

                @Override
                public void entriesDeleted(Collection<Jid> addresses) {
                    Log.d("entriesDeleted", "ug");
                }

                @Override
                public void presenceChanged(Presence presence) {
                    Log.d("presenceChanged", "ug");
                    //Resource from presence
                    String resource = presence.getFrom().getResourceOrEmpty().toString();
                    //Update resource part for user in DB or preferences
                    //...
                }
            });
}
EntityFullJid jid = JidCreate.entityFullFrom("user1@mydomain/6u1613j3kv"); 
OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(jid)
transfer.sendFile(new File("DirectoryPath"), "Description");
这就是我在smack和Openfire上解决文件传输问题的方法

在您的案例中,
sendFile(String sentTo)
function
sentTo
中的表单必须像my jid一样形成,其资源路径随着每次rppresence更改而改变

另外,您必须在Openfire服务器中添加以下属性:

xmpp.proxy.enabled - true
xmpp.proxy.externalip - MY_IP_ADDRESS
xmpp.proxy.port - 7777
我要说的是,我使用的是Openfire 4.0.2和Smack 4.2.2

这也可以通过简单的方式进行配置,只需打开资源即可

XMPPTCPConnectionConfiguration.Builder


请澄清您的问题-应该发生什么,发生了什么?我在发送文件时遇到503错误。请参阅第二个xml,因为他们的is 503错误代码和服务不可用。这是主要问题:(由于他们的服务返回503,这方面的主要责任在于接收者,此时您不太可能采取任何措施来解决此问题。嘿,在OpenFire Server属性中要做什么设置,以便接收者可以接收文件。
xmpp.proxy.enabled - true
xmpp.proxy.externalip - MY_IP_ADDRESS
xmpp.proxy.port - 7777
XMPPTCPConnectionConfiguration.Builder configurationBuilder = 
XMPPTCPConnectionConfiguration.builder(); 

configurationBuilder.setResource("yourResourceName");