gpt4 book ai didi

java - 用java发送文件到客户端

转载 作者:行者123 更新时间:2023-12-02 08:04:04 25 4
gpt4 key购买 nike

我是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();
}

我正在尝试发送简单的文本文件,但这些文件没有发送给客户端。

提前致谢。

最佳答案

我怀疑问题是您在将请求从客户端发送到服务器后没有刷新 PrintWriter:

w.println(request);
w.flush();

您似乎也在服务器端使用了PrintWriter。发送完内容后,请务必调用 w.flush()w.close()

此外,我假设您意识到这是一种极其低效的发送文件的方式。

关于java - 用java发送文件到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8449412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com