我用TCP编了个聊天软件,想加入文件传输功能,就是在点击传输文件按钮时,对方能够弹出一个对话框是否同意接受。这个功能怎么样实现呢?小弟一时还想不起来啊,不知那个高手肯给予指点迷津啊?感谢了!!!

解决方案 »

  1.   

    这个我也做了..
    可以这样,先将文件名发送过去,用File类的isFile()进行判断,紧接着进行传输,再用length()方法判别文件长度,不为空则new一个JDialog,JDialog添加
    两个JButton,一个"是"一个"否",将JButton注册ActionListener事件监听,点击"是"按钮,用IO开始传输,点击"否"则不进行操作.
    程序找不到了..提供下思路.
      

  2.   

    我也这样做了,单是文件名怎么发给对方呐,用的是TCP。
      

  3.   

    你加入一个按钮,这个按钮注册一个弹出JFileChooser,具体可以这样:
    if(e.getActionCommand().equals("上传")){                     //e是 Actionevent,"上传"是按钮的标签

      JFileChooser fileChooser = new JFileChooser();
      int i = fileChooser.showOpenDialog(this.sf);
      //sf.jd.setVisible(false);

      if(i==JFileChooser.APPROVE_OPTION){

         File selectedFile = fileChooser.getSelectedFile();
         JTextField tf = new JTextField();
         tf.setText(selectedFile.getName());
         sf.tf.setText(selectedFile.getAbsolutePath()); //获得文件路径,sf是聊天窗口,是个主类,sf.tf是sf中的一个JTextFiled,你从这儿得到的路径可以在sf.tf中显示,然后"发送"按钮就可以将文件名读进去,再传输到另一方.

        }
    }
    如果没看明白,可以继续问我.
      

  4.   

    嗯,这点我看明白了,多谢了。我的发送按钮是这样实现的:你请看private JButton getSendFileButton() {
    if (sendFileButton == null) {
            sendFileButton = new JButton();
    sendFileButton.setUI(new BasicButtonUI());
    sendFileButton.setToolTipText("传送文件");
    sendFileButton.setIcon(new ImageIcon(getClass().getResource("/sendFile.png")));
    sendFileButton.setBackground(new Color(212, 231, 245));
    sendFileButton.setBounds(new Rectangle(237, 261, 38, 25));
    sendFileButton.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e) {
    if(fs.changefile() == null)
    {
    //什么也不做
    }
    else
    {


    sendSignle(fs.trueFileName); //发送一个信号 fs.startServerThread(); //用线程启动传送文件
    }

    }
    });
    sendFileButton.addMouseListener(new java.awt.event.MouseAdapter() {   
    public void mouseExited(java.awt.event.MouseEvent e) {    
    sendFileButton.setBackground(new Color(212, 231, 245));
    }
    public void mouseEntered(java.awt.event.MouseEvent e) {
    sendFileButton.setBackground(new Color(0, 150, 200));
    }
    public void mousePressed(java.awt.event.MouseEvent e) {
    sendFileButton.setBackground(new Color(212, 231, 255));
    }
    });
    }
    return sendFileButton;
    }最关键的问题是:
    sendSignle(fs.trueFileName); //发送一个信号  
    这里出了问题,sendSingle()方法怎么样定义啊,我用的是TCP;其中trueFileName是要传输的文件名。
      

  5.   

    每个客户机都开一个serversocket,一旦一个客户机触发sendSignle事件,就请求另一个客户机的serversocket并建立连接线程(注意,一定要线程,否则没办法传多个文件),连接建立后由发送方将文件名传送给接受方,接受方收到请求后再显示相应的文件接收对话框,一旦允许接收并选择了存放的位置(发送同意接收信号给发送方),发送方此时开始从socket的outputstream中写入文件,而接受方从socket的inputstream中读取相关数据并写入文件。
      

  6.   

    五楼的大哥说的太对了,我就是按着这个思路进行的,现在最重要的是sendSingle()方法该如何实现,我用的是TCP。多谢了,俺在线等啊!!!!!!!!!
      

  7.   

    我觉得我已经说的很详细了,java中socket默认都是以tcp方式建立连接的,所以你不用管tcp或udp之类的底层协议,只要建立socket连接,就可以read来write去啦!
      

  8.   

    牛仔都很忙啊..
    将sendSignle(fs.trueFileName); 方法包装在一个"发送"按钮事件监听器类,在事件发生事调用我上面那段代码,不行么?
      

  9.   

     
    牛仔都很忙啊.. 
    将sendSignle(fs.trueFileName); 方法包装在一个"发送"按钮事件监听器类,在事件发生事调用我上面那段代码,不行么?
    [/Quote]我也做到这步了,fs.sendSignle(fs.trueFileName); //发送一个信号fs.startServerThread(); //用线程启动传送文件
    这个sendSingle();信号怎么样才能让通过服务器的另外一个客户端受到并响应呢?
    就差这一步啦!!!请多多帮忙啊!!!!万分感谢!!!!!!!!!!!
      

  10.   

    在大家的热情帮助下,我文件传输成功了。谢谢大家!!!! 我用的是C/S S/C模型,有一个客户端发送消息,经由服务器转发至每个客户端,所以,我在客户端发送信息的时候,加上本客户端的端口好,再由服务器转发,发至客户端时在将端口号分离出来,然后和自己的端口好比较,如果和自己的端口号相等就不做任何处理,不相等的话,就证明是传输文件的信号,就启动接受文件线程。接着建立,文件传输TCP连接。接着就可以传输文件啦! 
    最后还要感谢大家的热忱相助。 
    衷心的表示感谢!!!