TCP编程基于Socket类
Socket类之前写过聊天室,里面有介绍
web服务器基于http协议
原理 :
浏览器在通过端口向服务器发送网址信息 服务器收到网址字符串后进行分析,找到他请求的网页信息发响应给浏览器。
代码:
public class TomService {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(18890);//开启端口
while (true){//死循环使服务器一直在可以接受请求
Socket socket = serverSocket.accept();//监控是否有浏览器通过这个18890端口进行访问
System.out.println("服务器开启");
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int lenght = -1;
StringBuffer requestMessage=new StringBuffer();
while ((lenght = inputStream.read(buffer)) > -1){//获取网址
String string =new String(buffer,0,lenght);
System.out.println(1);
requestMessage.append(string);
break;
}
//分析请求报文
String message = Analysis.analysiaPlay(requestMessage.toString());
//想服务器返回数据
BackMeasage backMeasage = new BackMeasage(socket);
backMeasage.backPlay(message);
}
}
}
//对拿到的连接进行分析 并返回要的地址信息
class Analysis{
public static String analysiaPlay(String data){
String data1 = data.split("\n")[0].split(" ")[1];
System.out.println(data1);
String data2 = data1.substring(1);
System.out.println(data2);
return data2;
}
}
class BackMeasage{
static Socket socket;
BackMeasage(Socket socket){
this.socket = socket;
}
public void backPlay(String path ) throws IOException {
path ="D:\\File\\Big_data\\"+path;//文件地址信息
System.out.println(path);
String data = IOUtils.readText(path);
System.out.println(data);
Calendar i = Calendar.getInstance();
System.out.println(i.getTime());
//向浏览器发送Http的响应报文加上自己的数据
String httpResponse="HTTP/1.1 200 OK\n" +
"Content-Type:text/html\n" +
"Date:"+ i.getTime()+"\n"+ "\n"+data;
OutputStream outputStream = socket.getOutputStream();
outputStream.write(httpResponse.getBytes());
outputStream.close();
}
}