案例讲解
使用浏览器作为客户端
http://127.0.0.1:8080/day20/daohang.html
while循环让服务器持续监听(自己的端口),只要客户端请求了就返回数据。
服务器端代码
package BS;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class NewSever {
public static void main(String[] args) throws IOException {
ServerSocket sever = new ServerSocket(8080);
while (true){
// 使用死循环让服务器一直处于监听状态
Socket socket = sever.accept();
// 使用多线程提高效率
new Thread(new Runnable() {
// 注意子类中有异常,而父类中没有,不能直接抛出异常,只能使用try……catch
@Override
public void run() {
try {
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String s = br.readLine();
String path = s.split(" ")[1].substring(1);
System.out.println(path);
OutputStream out = socket.getOutputStream();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
// 下面三行必须要写 否则浏览器不会识别成功
out.write("HTTP/1.1 200 OK\r\n".getBytes());
out.write("Content-Type:text/html\r\n".getBytes());
out.write("\r\n".getBytes());
int len = 0;
byte[] bytes = new byte[1024];
while ((len = bis.read(bytes))!=-1){
out.write(bytes,0,len);
}
br.close();
socket.close();
}catch (IOException e){
System.out.println(e);
}
}
}).start();
}
// socket.close();
}
}
问题,抛出文件找不到异常?