这里记录一个类似tomcat的简单服务器的编写过程,帮助了解使用到的主要技术及原理
这里主要使用到socket网络编程以及线程等技术,关于io的技术也需要熟练掌握
思路讲解:
主要思路就是,每当有请求时,就会创建一个线程并使用socket进行监听,然后使用socket进行读取,及写入操作
代码实现:
package com.vincent.server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer {
private ServerSocket serverSocket;
private int port;
private boolean shutdown;
public MyServer(int port) {
super();
this.port=port;
}
//启动服务程序
public void startup(){
try {
serverSocket=new ServerSocket(port);
while(!shutdown){
Socket socket=serverSocket.accept();
System.out.println("一个请求来了");
new Thread(new DispatcherRequest(socket)).start();
}
} catch (IOException e) {
}
}
public static void main(String[] args) {
new MyServer(8888).startup();
}
}
package com.vincent.server;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class DispatcherRequest implements Runnable {
private Socket socket;
public DispatcherRequest(Socket socket) {
this.socket=socket;
}
@Override
public void run() {
InputStream is=null;
OutputStream os=null;
try {
is=socket.getInputStream();
os=socket.getOutputStream();
byte[] b=new byte[1024];
is.read(b);
System.out.println("客户端内容:"+new String(b));
String str="<html><head></head><body><h1>hello</h1></body></html>";
os.write(str.getBytes());
} catch (IOException e) {
}finally{
try {
is.close();
os.close();
} catch (IOException e) {
}
}
}
}
注意,这里的输出是在控制台里显示的,,