- 浏览: 46435 次
- 性别:
- 来自: 酆都
文章分类
最新评论
java socket实现Http服务器
- 博客分类:
- JAVA语言
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class Processor extends Thread{
private Socket socket;
private InputStream in;
private PrintStream out;
public final static String WEB_ROOT="c:\\workspace\\webserver\\htdocs";
public Processor(Socket socket){
this.socket=socket;
try {
in=socket.getInputStream();
out=new PrintStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
public void run(){
String filename=parse(in);
sendFile(filename);
}
public String parse(InputStream in){
BufferedReader br=new BufferedReader(new InputStreamReader(in));
String filename=null;
try {
String httpMessage=br.readLine();
String[] content=httpMessage.split(" ");
if(content.length!=3){
sendErrorMessage(400,"Client query error!");
return null;
}
System.out.println("code:"+content[0]+",fileName"+content[1]+",http version:"+content[2]);
filename=content[1];
} catch (IOException e) {
e.printStackTrace();
}
return filename;
}
public void sendErrorMessage(int errorCode,String errorMessage){
out.println("HTTP/1.0"+errorCode+" "+errorMessage);
out.println("content-type: text/html");
out.println();
out.println("");
out.println("Error Message");
out.println("");
out.println("");
out.println("ErrorCode:"+errorCode+",Message:"+errorMessage+"");
out.println("");
out.println("");
out.flush();
out.close();
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void sendFile(String filename){
File file=new File(Processor.WEB_ROOT+filename);
if(!file.exists()){
sendErrorMessage(404,"File Not Found!");
return;
}
try {
InputStream in=new FileInputStream(file);
byte content[]=new byte[(int)file.length()];
in.read(content);
out.println("HTTP/1.0 200 queryfile");
out.println("conrtent=length:"+content.length);
out.println();
out.write(content);
out.flush();
out.close();
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.WebServer.java
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public void serverStart(int port) {
try {
ServerSocket serverSocket = new ServerSocket(port);
while (true) {
Socket socket = serverSocket.accept();
new Processor(socket).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
int port = 80;
if (args.length == 1) {
port = Integer.parseInt(args[0]);
}
new WebServer().serverStart(port);
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class Processor extends Thread{
private Socket socket;
private InputStream in;
private PrintStream out;
public final static String WEB_ROOT="c:\\workspace\\webserver\\htdocs";
public Processor(Socket socket){
this.socket=socket;
try {
in=socket.getInputStream();
out=new PrintStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
public void run(){
String filename=parse(in);
sendFile(filename);
}
public String parse(InputStream in){
BufferedReader br=new BufferedReader(new InputStreamReader(in));
String filename=null;
try {
String httpMessage=br.readLine();
String[] content=httpMessage.split(" ");
if(content.length!=3){
sendErrorMessage(400,"Client query error!");
return null;
}
System.out.println("code:"+content[0]+",fileName"+content[1]+",http version:"+content[2]);
filename=content[1];
} catch (IOException e) {
e.printStackTrace();
}
return filename;
}
public void sendErrorMessage(int errorCode,String errorMessage){
out.println("HTTP/1.0"+errorCode+" "+errorMessage);
out.println("content-type: text/html");
out.println();
out.println("");
out.println("Error Message");
out.println("");
out.println("");
out.println("ErrorCode:"+errorCode+",Message:"+errorMessage+"");
out.println("");
out.println("");
out.flush();
out.close();
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void sendFile(String filename){
File file=new File(Processor.WEB_ROOT+filename);
if(!file.exists()){
sendErrorMessage(404,"File Not Found!");
return;
}
try {
InputStream in=new FileInputStream(file);
byte content[]=new byte[(int)file.length()];
in.read(content);
out.println("HTTP/1.0 200 queryfile");
out.println("conrtent=length:"+content.length);
out.println();
out.write(content);
out.flush();
out.close();
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.WebServer.java
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public void serverStart(int port) {
try {
ServerSocket serverSocket = new ServerSocket(port);
while (true) {
Socket socket = serverSocket.accept();
new Processor(socket).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
int port = 80;
if (args.length == 1) {
port = Integer.parseInt(args[0]);
}
new WebServer().serverStart(port);
}
}
发表评论
-
设计模式(24)- 访问者模式
2018-01-26 20:56 436访问者模式 1.定义 表示一个作用于某对象 ... -
设计模式(23)- 桥接模式
2018-01-25 08:39 294桥接模式 1.定义 将抽象部分与它的实现部 ... -
设计模式(22)- 职责者模式
2018-01-23 09:07 382职责者模式 1.定义 使多个对象都有机会处理 ... -
设计模式(21)- 装饰者模式
2018-01-21 20:47 271装饰者模式 1.定义 动态的给一个对象添加一 ... -
设计模式(20)- 解释器模式
2018-01-21 19:46 282解释器模式 1.定义 给定一个语言,定义它的文 ... -
设计模式(19)- 享元模式
2018-01-21 18:42 268享元模式 1.定义 运用共享技术,有效的支 ... -
设计模式(18)- 备忘录模式
2018-01-20 18:28 315备忘录模式 1.定义 在不破坏封装性的前提 ... -
设计模式(17)- 状态模式
2018-01-20 17:11 393状态模式 1.定义 允许一个对象在其内 ... -
设计模式(16)- 策略模式
2018-01-20 16:13 309策略模式 1.定义 定义一系列的算法,把它 ... -
设计模式(15)- 模板方法模式
2018-01-20 15:42 414模板方法模式 1.定义 定义一个操作中的 ... -
设计模式(14)- 组合模式
2018-01-14 14:03 274组合模式 1.定义 将对象组合成树形结构,以 ... -
设计模式(13)- 迭代器模式
2018-01-14 12:04 317迭代器模式 1.定义 提供一种方法,顺序 ... -
设计模式(12)- 命令模式
2018-01-13 14:48 354命令模式 1.定义 ... -
设计模式(11)- 观察者模式
2018-01-13 14:08 430观察者模式 1.定义 定义对象间的一种一对 ... -
设计模式(10)- 代理模式
2018-01-13 13:32 343代理模式 1.定义 为其他对象提供一种 ... -
设计模式(9)- 中介者模式
2018-01-13 12:57 228中介者模式 1.定义 用一个中介对象来封装 ... -
设计模式(8)- 原型模式
2018-01-13 12:02 384原型模式 1.定义 用原型模式指定创建对象 ... -
设计模式(7)- 生成器模式
2018-01-07 21:51 389生成器模式 1.定义 将复杂对象的构件和 ... -
设计模式(6)- 抽象工厂模式
2018-01-07 20:19 389抽象工厂模式 1.定义 提供一个创建一系 ... -
设计模式(5)- 工厂方法模式
2018-01-07 14:14 374工厂方法模式 1.定义 定义个 ...
相关推荐
Java Socket编程实现的简单多线程WEB服务器
Java Socket编程 PC端程序 用来传输文件 包括服务器、客户端
该项目是Socket.IO服务器的开源 Java 实现。基于Netty服务器框架。 根据 Apache License 2.0 获得许可。 支持1.x - 4.x版本的Socket.IO 客户端 支持 xhr 轮询传输 支持websocket传输 支持命名空间和房间 支持ack...
代码122行,只实现了HTTP GET的文件请求,注释很多,可轻易扩展
java Socket通信实现
Java Socket实例(服务器多线程) 自己写的代码
java socket 即时通讯服务器开发,
java Socket模拟客户端和服务器通信,简易窗体实现,代码简易,方便学习使用。服务器和客户端的代码放在一起了,中间有空行标注,记得分开。
当用户聊天时,将当前用户名、聊天对象、聊天内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端 当用户发送聊天信息时,服务端将会...
用java实现的http服务器端例程
这个socket通信比较直观,比较容易看懂,实现了Java中的socket的通信问题。是Java网络编程的一个比较不错的例子!
主要介绍了Java基于socket实现的客户端和服务端通信功能,结合完整实例形式分析了Java使用socket建立客户端与服务器端连接与通信功能,需要的朋友可以参考下
用java写的服务器客户端程序,是对socket的简单应用,可以进行通讯,简单易懂!
javaCV将socket获取的视频流推到流媒体(RTMP)服务器所需要的jar
java+Socket实现客户端服务器端的登录通信
使用socket实现的简单聊天室功能,包含客户端和服务器端代码,可以通过本实例快速了解java中socket的使用方法
JAVA实现的socket 实现服务器和客户端之间的传输
socket服务器 eclipse tomcat 适合没有接触过搭建服务器的新手。 简单的介绍怎么搭建一个java socket长连接服务器,创建一个demo,怎么发布到云服务器上。
该项目是Socket.IO服务器的开源 Java 实现。基于Netty服务器框架。 根据 Apache License 2.0 获得许可。 特征 支持1.x - 4.x版本的Socket.IO 客户端 支持 xhr 轮询传输 支持websocket传输 支持命名空间和房间 支持...