`
0428loveyu
  • 浏览: 30766 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

一个简单的Java服务器

 
阅读更多
/**
 * 
 */
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服务器

    本项目“简单JAVA WEB服务器”旨在提供一个基础的平台,帮助学习者理解Java Web服务器的工作原理,特别是静态网页服务和JSP(Java Server Pages)的执行,以及Cookie的解析。 1. **多线程技术**:Java Web服务器...

    JAVA简单服务器源代码

    在Java编程领域,开发一个简单的服务器来处理与数据库的交互是一项基础且重要的任务。这个"JAVA简单服务器源代码"提供了一个实例,展示了如何利用Java语言构建一个能够连接MySQL数据库并处理个人信息传输的服务器。...

    java语言搭建简单的服务器

    以下是一个简化的Java服务器代码示例: ```java import java.io.*; import java.net.*; public class SimpleWebServer { public static void main(String[] args) throws IOException { ServerSocket ...

    JAVA实现的简单的web服务器

    在IT领域,特别是Java编程实践中,开发一个简单的Web服务器是一项基础且重要的技能。"JAVA实现的简单的web服务器"项目正是这样一个实例,它演示了如何利用Java语言构建一个基本的HTTP服务器,能够处理GET请求并返回...

    JAVA实现简单的http静态网页服务器

    标题 "JAVA实现简单的http静态网页服务器" 涉及的核心知识点是使用Java编程语言构建一个基本的HTTP服务器,用于提供静态网页服务。这通常是为了学习、测试或在简单环境中部署Web应用。以下是对这个主题的详细说明: ...

    一个java tcp服务器的基础框架

    总结,这个“Java TCP服务器的基础框架”是一个利用Java NIO构建的、可配置的、支持并发连接的服务器框架。开发者可以通过理解并修改配置文件、源代码,以及启动脚本来定制自己的TCP服务器,满足特定应用场景的需求...

    Java开发的简单WEB服务器源码Java实用源码整理learns

    标题中的“Java开发的简单WEB服务器源码Java实用源码整理learns”表明这是一个关于Java Web服务器开发的项目,可能是为了教学或者学习目的而编写的。这个项目可能包含了一个简单的HTTP服务器实现,允许用户理解Web...

    Java开发的简单WEB服务器源码Java源码

    在Java编程领域,构建一个简单的Web服务器是一项常见的学习任务,它能帮助开发者理解HTTP协议、网络编程以及服务器端处理请求的基本原理。本源码提供了一个基础的实现,适合初学者研究和学习。下面我们将深入探讨这...

    http简易服务器 java 源码

    - StartServers.bat:这是一个批处理文件,通常用于启动Java服务器应用,它可能包含了运行Java程序的命令。 - ReadMe.txt:这是一个说明文件,可能包含了关于如何运行和配置服务器的详细信息。 - web:这个目录...

    JAVA100例之实例50 一个简单的Web服务器

    在本实例中,我们将深入探讨如何使用Java编程语言构建一个简单的Web服务器。这个主题涵盖了Java网络编程、HTTP协议的理解以及I/O流的运用等关键知识点。让我们逐一剖析这些概念。 首先,Java网络编程是Java平台的一...

    Java创建一个简单的时间服务器.rar

    这是用Java创建一个简单的时间服务器的例子,类似于微软为Windows定制的时间服务器,用于校准时间。可以通过这个网络时间服务器了解一些套按字、输入流以及缓冲区方面的相关基础知识。服务器创建部分,可参考如下...

    Java开发的简单WEB服务器源码

    本项目标题为“Java开发的简单WEB服务器源码”,意味着它提供了一个用Java语言编写的Web服务器的源代码,我们可以从中学习到如何构建一个能响应HTTP请求并返回静态资源的服务器。 首先,我们要了解Web服务器的基本...

    简单的web服务器 使用java搭建

    本文将深入探讨如何使用Java语言搭建一个简单的Web服务器,以及这个过程中的关键知识点。 首先,我们要理解Web服务器的基本概念。Web服务器是一种软件,它接收HTTP(超文本传输协议)请求并返回HTML页面或其他Web...

    Java Socket实现简单的web服务器

    Java Socket实现简单的Web服务器是一个基础但实用的编程实践,它涉及到网络编程、HTTP协议和文件I/O等核心概念。在本项目中,我们利用Java的Socket API构建了一个基本的服务器,该服务器仅处理HTTP GET请求并返回...

    java实现http服务器实例

    本实例将带你一步步探索如何利用Java实现一个简单的HTTP服务器,并通过源码解析来深化对HTTP协议的理解。 首先,让我们了解HTTP协议的基础。HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,用于从...

    简单Web服务器设计与实现.doc

    本文 SYSTEM设计了一个简单的Web服务器,采用了Java语言和Eclipse平台,实现了基本的Web服务器功能,并且能够通过HTTP GET命令获得一个简单的HTML文件。该设计可以应用在商业中解决实际问题,为Web开发和网络应用...

    java服务器程序源代码

    此Java程序实现了一个简单的文本聊天服务器。它使用了`java.io`、`java.net`、`java.awt`及`java.awt.event`等包中的类,通过创建一个`SocketServerExample`类来实现基本的网络通信功能。 ### 关键概念 1. **...

    一个经典的小Java服务器

    大家都以为服务器很神秘,...尤其是Java服务器异常的简单,当然要想把服务弄得更加的完美,那还要看自己的经验和公测。说了这么半天,你也不一定明白。看看我的这个简单的服务器源代码和测试网站吧,你一定眼前一亮!

    java 简单的服务器文档管理,包含下载和删除

    Java服务器文档管理是一种基于Java Servlet技术的Web应用,它提供了对服务器上文件的管理功能,如文件的下载和删除。这种管理系统通常用于简化用户对服务器上文档的操作,提高工作效率,同时确保数据的安全性。 ...

    Java实现简单的web文件服务器

    在本文中,我们将深入探讨如何使用Java来实现一个简单的Web文件服务器。这个项目不仅适合Java初学者,也是学习网络编程的绝佳实践。我们将讨论以下几个关键知识点: 1. **TCP与UDP协议**: - TCP(Transmission ...

Global site tag (gtag.js) - Google Analytics