簡體   English   中英

java文件傳輸的while循環不退出

[英]While loop for java file transfer not exiting

我正在編寫一個程序,最終將文件從客戶端傳輸到服務器以及從服務器到客戶端,但是客戶端從服務器接收文件的 while 循環(用 ** 標記)不會退出。 我已經發布了 client.java 和 server.java 文件,任何幫助將不勝感激。 謝謝!

客戶端.java

class Client{
    public static void main(String srgs[])throws IOException
    {
    Socket s=null;
    BufferedReader get=null;
    PrintWriter put=null;
    int userOption = 0;
    String cwd = System.getProperty("user.dir");
    try
    { 
        s=new Socket("localhost",5000);
        get=new BufferedReader(new InputStreamReader(s.getInputStream()));
        put=new PrintWriter(s.getOutputStream(),true);        
    }  
    catch(Exception e)
    {
        System.exit(0);
    }
    
    do{
        InputStreamReader get3=new InputStreamReader(s.getInputStream());
        System.out.println("Choose from the following options:");
        System.out.println("(1) Upload file to server");
        System.out.println("(2) Download File to server");
        System.out.println("(3) Exit application");
        BufferedReader dis1=new BufferedReader(new InputStreamReader(System.in));
        userOption=Integer.parseInt(dis1.readLine());
        put.println(userOption);    
        
        
        switch(userOption)
        {
            
            case 1:
                //upload file code here
                
                break;
                
            case 2:
                InputStreamReader get2=new InputStreamReader(s.getInputStream());
                String u,f;
                System.out.println("Enter the file name to transfer from server:");
                BufferedReader dis=new BufferedReader(new InputStreamReader(System.in));
                f=dis.readLine();
                put.println(f);
                File f1=new File(cwd +"\\"+ f);
                FileOutputStream  fs=new FileOutputStream(f1);

                BufferedInputStream d=new BufferedInputStream(s.getInputStream());
                BufferedOutputStream outStream = new BufferedOutputStream(new FileOutputStream(f1));
                byte buffer[] = new byte[1024];
                int read;
                
                **while((read = d.read(buffer)) > 0)
                {
                    outStream.write(buffer, 0, read);
                    outStream.flush();
                }**
                
                fs.close();
                System.out.println("File received");
                
                break;
        }
        
    } while (userOption != 3);
    s.close();
    }
}

服務器端.java

public class Server {   
    public static void main(String args[])throws IOException
    { 
        ServerSocket ss=null;
        try
        {  
            ss=new ServerSocket(5000);
        }
        catch(IOException e)
        { 
            System.out.println("couldn't listen");
            System.exit(0);
        }
        Socket cs=null;
        try
        { 
            cs=ss.accept();
            System.out.println("Connection established"+cs);
        }
        catch(Exception e)
        { 
            System.out.println("Accept failed");
            System.exit(1);
        } 
        while(true)
        {
        PrintWriter put1=new PrintWriter(cs.getOutputStream(),true);
        BufferedReader st1=new BufferedReader(new InputStreamReader(cs.getInputStream()));
        int s1=Integer.parseInt(st1.readLine());
        
            switch(s1)
            {
                case 1:
                    System.out.println("The client has requested to upload a file");
                    break;
                
                case 2:
                    System.out.println("The client has requested to download a file");
                    PrintWriter put=new PrintWriter(cs.getOutputStream(),true);
                    BufferedReader st=new BufferedReader(new InputStreamReader(cs.getInputStream()));
                    String s=st.readLine();
                    System.out.println("The requested file is : "+s);
                    File f=new File(s);
                        if(f.exists())
                        { 
    
                            BufferedInputStream d=new BufferedInputStream(new FileInputStream(s));
                            BufferedOutputStream outStream = new BufferedOutputStream(cs.getOutputStream());
                            byte buffer[] = new byte[1024];
                            int read;
                            while((read = d.read(buffer))!=-1)
                            {
                                outStream.write(buffer, 0, read);
                                outStream.flush();
                            }
                            d.close();
                            System.out.println("File transfered");
                        }
                    break;
                
                case 3:
                    System.out.println("The client has been terminated");
                    return;
                
                default:
                    System.out.println("The client has entered an invalid option");
                    break;
            }  
        }
    }  
}

您在兩個程序中使用相同的文件名,當您從同一目錄運行它們時,您將遇到此問題,因為該文件將被創建(再次)並被Client用零字節覆蓋。 您可以使用不同的文件名或在不同的目錄中運行程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM