Java 使用smack api进行文件传输XMPP(接收侦听器未获取请求)

Java 使用smack api进行文件传输XMPP(接收侦听器未获取请求),java,xmpp,smack,Java,Xmpp,Smack,嗨,我正在尝试发送文件。但它不会开始传输文件。在检查时,我发现接收方侦听器没有收到来自发送方的请求。 这是发送方代码:(ruff gui代码..只看文件传输内容)导入 现在Receiver的代码是:(ruff不支持gui等) 两者都已成功登录。。。 当我按下发件人发送按钮时。。它什么都不做,没有错误。就在英芬特等着吧。你觉得代码有什么问题吗?我做错什么了 你能解决这个问题吗?如果可以的话,请给出答案。 java.awt.Color; import javax.swing.*; import j

嗨,我正在尝试发送文件。但它不会开始传输文件。在检查时,我发现接收方侦听器没有收到来自发送方的请求。 这是发送方代码:(ruff gui代码..只看文件传输内容)导入

现在Receiver的代码是:(ruff不支持gui等)

两者都已成功登录。。。
当我按下发件人发送按钮时。。它什么都不做,没有错误。就在英芬特等着吧。你觉得代码有什么问题吗?我做错什么了

你能解决这个问题吗?如果可以的话,请给出答案。
java.awt.Color; 
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.text.DecimalFormat;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.tree.DefaultMutableTreeNode;

import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.SASLAuthentication;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import org.jivesoftware.smackx.filetransfer.FileTransfer;
import org.jivesoftware.smackx.filetransfer.FileTransferManager;
import org.jivesoftware.smackx.filetransfer.FileTransferNegotiator;
import org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer;
public class FileSelectionMainGUI {


    ConnectionConfiguration configGoogle = new ConnectionConfiguration("jabber.org", 5222);

    JFrame mainWindow;
    JLabel selectEmailLabel,selectFileLabel;
    JButton browseFilesButton,sendButton;
    JTextField browseField;
    JComboBox buddyListBox;
    JPanel contentPanel;
    Roster roster;
    FileTransferManager fileTransferManager;
    XMPPConnection connection;
    DecimalFormat transferringProgress = new DecimalFormat("#");
    XMPPFileManager receiveManager;

    public void createGUI()
    {
        mainWindow = new JFrame("Sender");
        mainWindow.setLayout(null);
        mainWindow.setSize(700, 600);
        mainWindow.setLocation(100, 50);

        contentPanel = new JPanel();
        contentPanel.setLayout(null);
        contentPanel.setBounds(0, 0, 700, 600);

        selectEmailLabel = new JLabel("Enter User Email ID");
        selectEmailLabel.setBounds(80, 325, 150, 30);
        contentPanel.add(selectEmailLabel);

        selectFileLabel = new JLabel("Select File");
        selectFileLabel.setBounds(96, 390, 150, 30);
        contentPanel.add(selectFileLabel);

        buddyListBox = new JComboBox();
        buddyListBox.addItem("receiver@jabber.org");
        buddyListBox.setBackground(Color.white);
        buddyListBox.setBounds(230, 325, 390, 30);
        contentPanel.add(buddyListBox);

        browseField = new JTextField();
        browseField.setText("testdoc.txt");
        browseField.setBounds(230, 390, 220, 30);
        contentPanel.add(browseField);

        browseFilesButton = new JButton("Browse File");
        browseFilesButton.setBounds(470, 390, 130, 30);
        contentPanel.add(browseFilesButton);

        sendButton = new JButton("Send File");
        sendButton.setBounds(470, 490, 130, 30);
        contentPanel.add(sendButton);
        sendButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                try {
                    sendFile(buddyListBox.getItemAt(0).toString(), browseField.getText());
                } catch (XMPPException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });

        mainWindow.add(contentPanel);
        mainWindow.setVisible(true);

    }




    public void login(String userName,String password,String type_server)
        {


                    configGoogle.setSASLAuthenticationEnabled(true);
                    connection = new XMPPConnection(configGoogle);
                    XMPPConnection.DEBUG_ENABLED = true;

                    SASLAuthentication.supportSASLMechanism("PLAIN");
                    try
                    {

                        connection.connect();
                        connection.login(userName, password);
                        System.out.println("logged in...");
                    }
                    catch(Exception e)
                    {

                        e.printStackTrace();
                    }
                    new ServiceDiscoveryManager(connection);
                    fileTransferManager = new FileTransferManager(connection);
                    FileTransferNegotiator.setServiceEnabled(connection, true);

        }









    public void sendFile(String userID, String path) throws XMPPException {

        OutgoingFileTransfer fileTransfer = fileTransferManager.createOutgoingFileTransfer(userID);
        System.out.println("status is:"+fileTransfer.getStatus());
        try {
            fileTransfer.sendFile(new File(path), "this is the description");
            System.out.println("status is:"+fileTransfer.getStatus());
            System.out.println("sent .. just");
            while (!fileTransfer.isDone())
            {

                if (fileTransfer.getStatus() == FileTransfer.Status.refused)
                {
                    JOptionPane.showMessageDialog(null, "Could not send the file to " + userID + ".", "Failed", JOptionPane.ERROR_MESSAGE);
                    return;
                }

                if (fileTransfer.getStatus() == FileTransfer.Status.error)
                {

                    JOptionPane.showMessageDialog(null, "Cannot send the file because an error occured during the process.", "Failed", JOptionPane.ERROR_MESSAGE);
                    return;
                }

            }

            System.out.println(fileTransfer.getFileName() + "has been successfully transferred.");

            System.out.println("The Transfer is " + fileTransfer.isDone());

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

    }


    public static void main(String args[])
    {
        FileSelectionMainGUI obj = new FileSelectionMainGUI();
        obj.createGUI();
        obj.login("senderjabberid", "password", "jabber");


    }

}
import java.awt.Color; 
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.tree.DefaultMutableTreeNode;

import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.SASLAuthentication;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
import org.jivesoftware.smackx.filetransfer.*;
public class FileSelectionMainGUI {


    ConnectionConfiguration configGoogle = new ConnectionConfiguration("jabber.org", 5222);

    JFrame mainWindow;
    JLabel selectEmailLabel,selectFileLabel;
    JButton browseFilesButton,sendButton;
    JTextField browseField;
    JComboBox buddyListBox;
    JPanel contentPanel;
    Roster roster;
    FileTransferManager fileTransferManager;
    XMPPConnection connection;
    DecimalFormat transferringProgress = new DecimalFormat("#");
    XMPPFileManager receiveManager;

    public void createGUI()
    {
        mainWindow = new JFrame("RECEIVER");
        mainWindow.setLayout(null);
        mainWindow.setSize(700, 600);
        mainWindow.setLocation(100, 50);

        contentPanel = new JPanel();
        contentPanel.setLayout(null);
        contentPanel.setBounds(0, 0, 700, 600);

        selectEmailLabel = new JLabel("Enter User Email ID");
        selectEmailLabel.setBounds(80, 325, 150, 30);
        contentPanel.add(selectEmailLabel);

        selectFileLabel = new JLabel("Select File");
        selectFileLabel.setBounds(96, 390, 150, 30);
        contentPanel.add(selectFileLabel);

        buddyListBox = new JComboBox();
        buddyListBox.addItem("hellobuddy.test2@gmail.com");
        buddyListBox.setBackground(Color.white);
        buddyListBox.setBounds(230, 325, 390, 30);
        contentPanel.add(buddyListBox);

        browseField = new JTextField();
        browseField.setText("underline.png");
        browseField.setBounds(230, 390, 220, 30);
        contentPanel.add(browseField);

        browseFilesButton = new JButton("Browse File");
        browseFilesButton.setBounds(470, 390, 130, 30);
        contentPanel.add(browseFilesButton);

        sendButton = new JButton("Send File");
        sendButton.setBounds(470, 490, 130, 30);
        contentPanel.add(sendButton);

        mainWindow.add(contentPanel);
        mainWindow.setVisible(true);

    }




    public void login(String userName,String password,String type_server)
        {


                    connection = new XMPPConnection(configGoogle);
                    XMPPConnection.DEBUG_ENABLED = true;
                    SASLAuthentication.supportSASLMechanism("PLAIN", 0);
                    try
                    {
                        connection.connect();
                        connection.login(userName, password);
                        System.out.println("logged in...");
                    }
                    catch(Exception e)
                    {

                        e.printStackTrace();
                    }
                    new ServiceDiscoveryManager(connection);
                                        fileTransferManager = new FileTransferManager(connection);

                                        FileTransferNegotiator.setServiceEnabled(connection, true);

                    fileTransferManager.addFileTransferListener(new FileTransferListener() {

                                        @Override
                                        public void fileTransferRequest(FileTransferRequest ftr) {
                                            System.out.println("got request");
                                       try {
                                            IncomingFileTransfer transfer = ftr.accept();
                                            System.out.println("status is:"+transfer.getStatus());

                                            transfer.recieveFile(new File("testdoc.txt"));
                                            System.out.println("file recieved");
                                        } catch (XMPPException ex) {
                                            Logger.getLogger(FileSelectionMainGUI.class.getName()).log(Level.SEVERE, null, ex);
                                            ex.printStackTrace();
                                        }
                                                                    }
                                        });


        }

    public static void main(String args[])
    {
        FileSelectionMainGUI obj = new FileSelectionMainGUI();
        obj.createGUI();
        obj.login("receiverjabberid", "password", "jabber");


    }

}