Java 服务器返回客户端需要的任何文件
我使用的是linux,我的服务器接收来自客户端的输入流,并且只返回客户端从浏览器请求的文件 它可以完美地编译,但不返回任何内容。我在最后列出了运行服务器和获取文件所遵循的所有步骤 服务器Java 服务器返回客户端需要的任何文件,java,sockets,Java,Sockets,我使用的是linux,我的服务器接收来自客户端的输入流,并且只返回客户端从浏览器请求的文件 它可以完美地编译,但不返回任何内容。我在最后列出了运行服务器和获取文件所遵循的所有步骤 服务器 import java.io.*; import java.net.*; public class Server { public static void main(String[] args) throws IOException { ServerSocket serverSocke
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(9999);
} catch (IOException ex) {
System.out.println("Can't setup server on this port number. ");
}
Socket socket = null;
InputStream in = null;
OutputStream out = null;
try {
socket = serverSocket.accept();
} catch (IOException ex) {
System.out.println("Can't accept client connection. ");
}
try {
in = socket.getInputStream();
} catch (IOException ex) {
System.out.println("Can't get socket input stream. ");
}
try {
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = br.readLine();
System.out.println("File name = " + line);
//Deixem nomes el nom del File o fitxer
String fileName = line.replace("GET /", "");
fileName = fileName.replace(" HTTP/1.1", "");
System.out.println("File name is" + fileName);
out = new FileOutputStream(fileName);
} catch (FileNotFoundException ex) {
System.out.println("File not found. ");
}
byte[] bytes = new byte[16*1024];
int count;
while ((count = in.read(bytes)) > 0) {
out.write(bytes, 0, count);
System.out.println("Bytees "+count);
}
out.close();
in.close();
socket.close();
serverSocket.close();
}
}
正如您所看到的,我正在使用replace()方法只保留文件名。客户端将是请求文件的浏览器,例如:
- 客户端需要一个文件hello.txt
localhost:9999/hello.txt
- 服务器位于文件夹java/bin中,名称为server.class
- 文件hello.txt位于java/files中
- cd/java文件
- java-cp../bin服务器[-p 9999]
但是我没有收到任何文件为什么?我做错什么了吗?首先,听从Jon Skeet的建议 其次,如果您正在学习,请遵循以下步骤
问题是您试图写入的不是套接字输出流,而是文件 当然,如果您想使用http服务器。你可以查一下 其他问题: 您必须读取文件以进行流式传输,最好编写Response头。
您的服务器将只处理一个不正确的请求。您应该忽略路径,只允许下载特定格式。您的try-catch块被误用。首先,您没有在响应中写入任何HTTP头。我强烈建议不要尝试编写您自己的HTTP服务器,因为已经存在这么多的HTTP服务器。。。如果您想编写代码以按照自己的意愿进行响应,请将其放在现有HTTP服务器的上下文中,例如作为Tomcat中的servlet。(我还要指出,您编写的代码将是一个重大的安全问题……您真的不希望客户端能够请求服务器上的任何文件)。您能否在回答中告知您不喜欢的内容?虽然此链接可以回答问题,最好在这里包括答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@如果你读了所有你能看到的,我提到的主要问题。声明“Promblem is…”和添加链接是更好的选择,而不是重写他所有的代码,因为这些代码有许多其他错误,甚至与问题无关。但我可以同意,最好是把它写成评论