/**
*
*/
package iotest.serversocket;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author Brandon B. Lin
*
*/
public class SingleFileHttpServer extends Thread {
private byte[] content;
private byte[] header;
private int port = 80;
public SingleFileHttpServer(String data, String encoding, String MIMEType,
int port) throws UnsupportedEncodingException {
this(data.getBytes(encoding), encoding, MIMEType, port);
}
public SingleFileHttpServer(byte[] data, String encoding, String MIMEType,
int port) throws UnsupportedEncodingException {
this.content = data;
this.port = port;
createHeader(encoding, MIMEType);
}
private void createHeader(String encoding, String MIMEType)
throws UnsupportedEncodingException {
String header = "HTTP/1.0 200 OK\r\n" + "Server: OneFIle 1.0\r\n"
+ "Content-length: " + content.length + "\r\n"
+ "Content-type: " + MIMEType + "\r\n\r\n";
this.header = header.getBytes(encoding);
}
@Override
public void run() {
try {
ServerSocket server = new ServerSocket(port);
log(server.getLocalPort());
while (true) {
respond(server);
}
} catch (IOException exception) {
System.err.println("Could not start server. Port Occupied!");
}
}
private void log(int port) {
System.out.println("Accepting connection on port " + port);
System.out.println("Data to be sent: ");
try {
System.out.write(content);
} catch (IOException e) {
e.printStackTrace();
}
}
private void respond(ServerSocket server) {
Socket connection = null;
try {
connection = server.accept();
String request = readRequestFromSocket(connection);
boolean writeHeader = (request.toString().indexOf("HTTP/") != -1);
writeToSocket(connection, writeHeader);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (connection != null)
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private String readRequestFromSocket(Socket connection) throws IOException {
InputStream in = new BufferedInputStream(connection.getInputStream());
StringBuffer request = new StringBuffer(80);
while (true) {
int readByte = in.read();
if (readByte == '\r' || readByte == '\n' || readByte == -1)
break;
request.append((char) readByte);
}
return request.toString();
}
private void writeToSocket(Socket connection, boolean writeHeader)
throws IOException {
OutputStream out = new BufferedOutputStream(
connection.getOutputStream());
if (writeHeader) {
out.write(header);
}
out.write(content);
out.flush();
}
public static void main(String[] args) {
String fileName = "index.html";
String contentType = "text/html";
String encoding = "ASCII";
int port = 80;
byte[] data = readFileToByteArray(fileName);
try {
new SingleFileHttpServer(data, encoding, contentType, port).start();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
private static byte[] readFileToByteArray(String fileName) {
byte[] data = null;
try {
InputStream in = new FileInputStream(fileName);
ByteArrayOutputStream out = new ByteArrayOutputStream();
int readByte;
while ((readByte = in.read()) != -1)
out.write(readByte);
data = out.toByteArray();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
return data;
}
}
分享到:
相关推荐
一个简单的多线程JAVA WEB服务器,实现静态网页以及简单JSP访问,cookie解析等。希望对想了解JAVA WEB服务器的同学有帮助
用Java语言编写的一个简单服务器,接受请求响应,代码容易看懂适合初学者。
这是用Java创建一个简单的时间服务器的例子,类似于微软为Windows定制的时间服务器,用于校准时间。可以通过这个网络时间服务器了解一些套按字、输入流以及缓冲区方面的相关基础知识。服务器创建部分,可参考如下...
简单的JAVA HTML服务器 实现原理为采用Socket原理、线程池、输入输出流及简单的HTTP协议,麻烦虽小,五脏俱全,只有两个类文件。 使用方法,在DOS窗口下,转到当前HTMLJAR所在目录,打入如下命令: java -Djava.ext....
JAVA100例之实例50 一个简单的Web服务器
大家都以为服务器很神秘,...尤其是Java服务器异常的简单,当然要想把服务弄得更加的完美,那还要看自己的经验和公测。说了这么半天,你也不一定明白。看看我的这个简单的服务器源代码和测试网站吧,你一定眼前一亮!
Java开发的简单WEB服务器源码Java源码
HTTP代理服务器java 简单网站过滤
8.2.1 一个简单例子[/font] 8.2.2 httpservlet的常用对象介绍[/font] 8.3 cookie编程介绍[/font] 8.3.1 cookie简介[/font] 8.3.2 一个cookie例子程序[/font] 8.4 小结[/font] [/font] 第9章 servlet高级编程[/font] ...
Java开发的简单WEB服务器源码
java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针...
简单web服务器,接收http的Get请求并简单分析,并返回相应的html页面或图片
Java开发的简单WEB服务器源码Java实用源码整理learns
一个简单的服务器日志分析程序,可以供JAVA初学者学习。
用java语言实现了最简单的web服务器,供大家参考!
http简易服务器 java 源码 实现重定向 实现MIME识别
用java搭建一个简单的web网络服务器,实现了对数据和图像的显示 ----------------------------------------------------
Java自己写的简单web文件服务器,有详细注释,实现简单的文件服务器交互功能,实现TCP多线程连接和UDP传输文件,适合Java网络编程初学者参考
是由java servlet实现的 简单的服务器文档管理,包含文件下载和删除
java编写的简单DNS服务器代码,可用于二次开发,或者作为测试