[英]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.