我正在使用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();
}
}
正如你可以看到我使用的方法代替()只留下文件名。客戶端會是誰都會詢問例如文件瀏覽器:
- 客戶希望一個文件hello.txt的
localhost:9999/hello.txt
- 服務器是在文件夾中的java/bin中使用名稱Server.class
- 文件hello.txt的是在java /文件
這我是如何從控制檯執行我的服務器:
- CD中的Java /文件
- java命令../bin服務器[-p 9999]
但我不接受任何文件,爲什麼?難道我做錯了什麼??
那麼你沒有在響應中寫入任何HTTP頭文件。我強烈建議不要嘗試編寫自己的HTTP服務器,當已經存在太多的HTTP服務器時...如果您想要編寫代碼以便根據需要進行響應,請將其放入現有HTTP服務器的上下文中,例如,作爲Tomcat中的servlet。 (我也注意到你寫的代碼將是一個很大的安全問題......你真的不希望客戶端能夠要求服務器上的任何*文件)。 –