关闭

一个简单的Java服务器

发表于:2014-6-19 10:23

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Brandon B. Lin    来源:51Testing软件测试网采编

/**
*
*/
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();
}
}
}
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号