我正在使用linux,我的服务器从客户端接收输入流,只返回客户端要求的文件。
它编译完美但没有返回任何内容,我列出了我在结束时遵循的所有步骤来运行服务器并获取文件。
服务器
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()只保留fileName。客户端将是要求提供文件的浏览器,例如:
localhost:9999/hello.txt
这是我如何从控制台执行我的服务器:
但我没有收到任何文件为什么?我做错了吗?
答案 0 :(得分:0)
首先,请遵循Jon Skeet的建议
其次,如果你正在学习,那么请遵循这个 writing and reading using socket
问题是您尝试不写入套接字输出流而是写入文件 当然,如果你想做http服务器。你可以查看simple http server question
其他问题: 你必须阅读你的文件以进行流式传输,最好编写一个responce标头。 您的服务器将只处理一个不正确的请求。您应该忽略路径并且只允许下载特定格式。你的try catch块误用了。