需求:写一个模拟服务器小程序,当服务器开启后,多个浏览器客户端可以并发访问,服务器获取浏览器的请求信息,并反馈信息给浏览器。
效果如下:
编译并开启(运行)服务器,服务器处于阻塞状态,等待浏览器的访问
谷歌浏览器访问成功:
服务端的访问信息:
一个浏览器访问结束后,服务端继续处于阻塞状态等待下一次的访问
火狐浏览器访问成功:
IE浏览器访问成功:
技术要点:
1,创建ServerSocket服务器,定义端口号为80;
2,创建通用的处理浏览器请求并反馈数据的对象,此处为利用多线程,故实现runnable接口重写run方法;
3,为实现多个不确定的请求,所以写一个while(true)循环,当服务器接收到一个请求,就创建一个线程并启动。
代码如下:
import java.net.ServerSocket;
import java.net.Socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.lang.Runnable;
class CheapCopyServer
{
public static void main(String[] args) throws IOException
{
ServerSocket ss=new ServerSocket(80);
while(true){
Socket s=ss.accept();
new Thread(new BrowserClient(s)).start();
}
}
}
class BrowserClient implements Runnable
{
private Socket s;
public BrowserClient(Socket s){
this.s=s;
}
@Override
public void run(){
try{
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"......connected");
InputStream in=s.getInputStream();
byte[] buf=new byte[1024];
int len=in.read(buf);
String text=new String(buf,0,len);
System.out.println(text);
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
out.println("<font color='#0000ff' size='5'>连接成功!</font>");
s.close();
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException("出错啦^_^");
}
}
}
很简单的一个小程序,可以很入门地研究一下web服务器的工作原理,浏览器的请求原理。