Java套接字传输文件

时间:2016-09-06 18:35:59

标签: java file sockets

我有以下服务器

public class handlerfereastra extends JFrame implements ActionListener {

    Socket sc;
    JFileChooser jf1,jf2;

    public handlerfereastra(Socket sc)
    {
        this.sc=sc;
        setSize(500,500);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container x=getContentPane();
        x.setLayout(new FlowLayout());
        JButton butrec=new JButton("Select path to receive");
        JButton butsen=new JButton("Select file to send");
        butrec.addActionListener(this);
        butsen.addActionListener(this);
        x.add(butrec);
        x.add(butsen);
        setVisible(true);
        new receptioneaza(sc).start();
    }

    @Override
    public void actionPerformed(ActionEvent e) {

        if(e.getActionCommand().compareTo("Select path to receive")==0)
        {
                jf1=new JFileChooser();
                jf1.showOpenDialog(this);

        }
        else if(e.getActionCommand().compareTo("Select file to send")==0)
        {
            jf2=new JFileChooser();
            jf2.showOpenDialog(this);
            try {
                BufferedInputStream bus=new BufferedInputStream(new FileInputStream(jf2.getSelectedFile()));
                PrintStream ps=new PrintStream(sc.getOutputStream());
                int count;
                byte[]bs=new byte[2048];
                System.out.println(jf2.getSelectedFile());
                while((count=bus.read(bs))>0)
                {
                    ps.write(bs,0,count);
                    ps.flush();
                }
                ps.flush();
                bus.close();
            } catch (FileNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    }
}

这是我的客户端类

public class receptioneaza extends Thread {
    Socket sc;
    public receptioneaza(Socket sc)
    {
        this.sc=sc;
    }

    @Override public void run()
    {
        while(true)
        {
            try {
                InputStream in=sc.getInputStream();
                byte[]buf=new byte[2048];
                File fl=new File("salveaza");
                FileOutputStream fos=new FileOutputStream(fl);
                byte[] buffer = new byte[1024];
                int count;
                    while((count=in.read(buffer)) >0){
                    fos.write(buffer,0,count);
                    fos.flush();
                }
                fos.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

我想将文件从服务器发送到客户端,另一种方式。问题是,当我从服务器发送文件进展顺利但是如果我从服务器发送第二个文件我不会看到文件已修改。它仍然是我发送的第一个文件。对于客户端也是如此。在我第一次发送文件后,它们是否会保持不变?

0 个答案:

没有答案