我是java的新手。我正在尝试创建一个简单的java文件服务器,客户端可以从中请求文件并下载它。基本上当客户端请求文件时,它将简单地从服务器的文件夹写入客户端文件夹。当我运行我的代码时,它不显示任何错误,但客户端请求的文件也没有写入它的文件夹。
我的客户端代码:
public void download(Socket s) throws Exception {
DataInputStream din=new DataInputStream(s.getInputStream());
DataOutputStream dout=new DataOutputStream(s.getOutputStream());
BufferedReader r = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedReader con = new BufferedReader(new InputStreamReader(System.in));
PrintWriter w = new PrintWriter(s.getOutputStream(), true);
System.out.print("Enter File Name :");
String request = con.readLine();
w.println(request);
String msg = r.readLine();
if (msg.startsWith("ERROR")) {
System.out.println("File not found on Server ...");
return;
} else if (msg.startsWith("FOUND")) {
System.out.println("Receiving File ...");
File f = new File(request);
if (f.exists()) {
String Option;
System.out.println("File Already Exists. Want to OverWrite (Y/N) ?");
Option = con.readLine();
if (Option == "N") {
dout.flush();
return;
}
}
FileOutputStream fileout = new FileOutputStream(f);
int ch;
String temp;
do {
temp = din.readLine();
ch = Integer.parseInt(temp);
if (ch != -1) {
fileout.write(ch);
}
} while (ch != -1);
fileout.close();
System.out.println(din.readLine());
}
}
服务器端:
public class Fileagent extends Thread {
Socket client;
DataInputStream din;
DataOutputStream dout;
ServerSocket soc;
PrintWriter w;
BufferedReader r;
public Fileagent(Socket soc) {
try {
client = soc;
din = new DataInputStream(client.getInputStream());
dout = new DataOutputStream(client.getOutputStream());
w = new PrintWriter(client.getOutputStream(), true);
r = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedReader con = new BufferedReader(new InputStreamReader(System.in));
System.out.println("FTP Client Connected ...");
start();
} catch (Exception ex) {
}
}
public void upload() throws Exception {
w.println("SEnding.....");
String file = r.readLine();
File f = new File(file);
if (!f.exists()) {
w.println("ERROR");
return;
} else {
w.println("FOUND");
FileInputStream fin = new FileInputStream(f);
int ch;
do {
ch = fin.read();
w.println(String.valueOf(ch));
} while (ch != -1);
fin.close();
}
我正在尝试发送简单的文本文件,但文件没有发送给客户端。
提前致谢。
答案 0 :(得分:1)
我怀疑问题是您在从客户端向服务器发送请求后没有刷新PrintWriter
:
w.println(request);
w.flush();
您似乎也在服务器端使用PrintWriter
。完成发送内容后,请务必致电w.flush()
或w.close()
。
另外,我假设您意识到这是一种非常低效的文件发送方式。
答案 1 :(得分:1)
看起来您的问题源于此
String request=con.readLine();
您总是从这个con
对象中读取内容。但是你将Socket s
传递给方法。
还有其他一些问题,例如Gray提到的问题,以及你在自己的行上写下每个字符的问题,但这些问题只是搞砸了格式化;它们不应该阻止你获取文件......