package number;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.lang.Thread;
import java.util.StringTokenizer;
public class TCPServer {
public static void main(String[] args) {
int port;
ServerSocket ss;
try{
port=Integer.parseInt(args[0]);
}catch(Exception e){
port=8080;
}
try{
//监听服务器端口,等待连接请求
ss=new ServerSocket(port);
System.out.println("TCPServer running on port:"+ss.getLocalPort());
//显示启动信息
while(true){
Socket socket=ss.accept();
System.out.println("New connection accepted"+socket.getInetAddress()+":"+socket.getPort());
//创建分线程
try{
httpRequestHandle request=new httpRequestHandle(socket);
Thread thread = new Thread(request);
//启动线程
thread.start();
}catch(Exception e){
System.out.println(e);
}
}
}catch(Exception e){
System.out.println(e);
}
}
}
class httpRequestHandle implements Runnable {
final static String CRLF="\r\n";
Socket socket;
InputStream input;
OutputStream output;
BufferedReader br;
//构造方法
public httpRequestHandle(Socket socket)throws Exception{
this.socket=socket;
this.input=socket.getInputStream();
this.output=socket.getOutputStream();
this.br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
//实现Runnale接口的run()方法
public void run() {
try{
processRequest();
}catch(Exception e){
System.out.println(e);
}
}
private void processRequest() throws Exception{
while(true){
//读取并显示web浏览器提交的请求信息
String headerLine=br.readLine();
System.out.println("The client request is"+headerLine);
if(headerLine.equals(CRLF)||headerLine.equals("")){
break;
}
StringTokenizer s=new StringTokenizer(headerLine);
String temp=s.nextToken();
if(temp.equals("GET")){
String fileName=s.nextToken();
fileName="."+fileName;
//打开所有请求的文件
FileInputStream fis=null;
boolean fileExists=true;
try{
fis=new FileInputStream(fileName);
}catch(FileNotFoundException e){
fileExists=false;
}
//完成回应消息
String serverLine = "Server: a simple java httpServer";
String statusLine = null;
String contentTypeLine = null;
String entityBody = null;
String contentLengthLine = "error";
if ( fileExists )
{
statusLine = "HTTP/1.0 200 OK" + CRLF ;
contentTypeLine = "Content-type: " +
contentType( fileName ) + CRLF ;
contentLengthLine = "Content-Length: "
+ (new Integer(fis.available())).toString()
+ CRLF;
}
else
{
statusLine = "HTTP/1.0 404 Not Found" + CRLF ;
contentTypeLine = "text/html" ;
entityBody = "<HTML>" +
"<HEAD><TITLE>404 Not Found</TITLE></HEAD>" +
"<BODY>404 Not Found"
+"<br>usage:http://yourHostName:port/"
+"fileName.html</BODY></HTML>" ;
}
// 发送到服务器信息
output.write(statusLine.getBytes());
output.write(serverLine.getBytes());
output.write(contentTypeLine.getBytes());
output.write(contentLengthLine.getBytes());
output.write(CRLF.getBytes());
// 发送信息内容
if (fileExists)
{
sendBytes(fis, output) ;
fis.close();
}
else
{
output.write(entityBody.getBytes());
}
}
}
//关闭套接字和流
try {
output.close();
br.close();
socket.close();
}
catch(Exception e) {
System.out.println(e);
}
}
private static void sendBytes(FileInputStream fis, OutputStream os)
throws Exception
{
// 创建一个 1K buffer
byte[] buffer = new byte[1024] ;
int bytes = 0 ;
// 将文件输出到套接字输出流中
while ((bytes = fis.read(buffer)) != -1 )
{
os.write(buffer, 0, bytes);
}
}
private static String contentType(String fileName)
{
if (fileName.endsWith(".htm") || fileName.endsWith(".html"))
{
return "text/html";
}
return "fileName";
}
}
分享到:
相关推荐
这里的主题聚焦于使用Java进行网络编程来实现一个基于HTTP协议的Web服务器。在NetBeans这样的集成开发环境中,开发者可以利用其丰富的功能和工具来简化开发过程。 首先,我们需要理解Java网络编程的基础。Java提供...
总的来说,"计算机网络实验一:Windows环境下用Java实现web服务器"是一次综合性的学习体验,涵盖了HTTP协议、网络编程、Java编程以及服务器与前端的交互等多个重要知识点。通过实践,学生将能够更全面地理解Web服务...
Java的HttpURLConnection和HttpClient类为实现HTTP请求提供了便利,同时,读者也会了解如何构建基于Servlet的Web服务器,处理HTTP请求和响应。 对于分布式系统和Web服务,书中的内容可能包括Java RMI(Remote ...
在本资料中,《Java网络编程》第三版提供了深入浅出的讲解,旨在帮助开发者提升对这一领域的理解。 1. **基础概念**: - **网络模型**:Java网络编程基于OSI七层模型和TCP/IP四层模型。理解这些模型有助于理解网络...
Java网络编程是Java开发中的重要领域,它涵盖了网络应用程序的设计、实现和调试。在这个主题下,我们可以探讨多个关键知识点: 1. **Java Socket编程**:Java的Socket类提供了基于TCP/IP协议的网络通信能力。通过...
Java Socket 编程实现的简单多线程 WEB 服务器 在本文中,我们将详细介绍如何使用 Java 的 Socket 编程实现一个简单的多线程 WEB 服务器。 Socket 编程简介 Socket 编程是 Java 网络编程的基础,它允许开发者创建...
《Java网络编程精解》是孙卫琴老师的一本经典教程,主要涵盖了Java语言在网络编程领域的深度解析。这本书深入浅出地介绍了如何使用Java进行网络通信,包括基本的TCP/IP协议、套接字编程、多线程技术以及HTTP、FTP等...
它可以帮助开发者深入理解网络通信过程,提升Java编程能力,同时为理解和开发更复杂的Web应用打下坚实基础。虽然目前的实现存在局限性,但通过不断迭代和改进,可以逐步将其完善成一个功能完备的Web服务器。
Java网络编程是Java开发中的重要领域,它涵盖了网络通信的所有基本概念和技术,包括TCP/IP协议、套接字编程、多线程、数据序列化以及HTTP、FTP等网络协议的实现。在这个“Java网络编程实例3”中,我们将深入探讨这些...
总的来说,Java网络编程原理与JSP Web开发核心技术的学习涵盖了网络通信、动态网页生成、服务器端处理等多个方面,是构建强大、高效Web应用程序的基础。通过深入理解和实践,开发者可以创建出满足各种需求的互联网...
尽管这里没有明确提到Servlet,但在更复杂的Java Web服务器实现中,Servlet容器(如Tomcat)通常用于管理和运行Servlet。 5. **线程管理**: 由于Web服务器可能同时接收多个请求,因此需要有效地管理线程来处理...
1. **Java网络编程基础**:首先,书中会介绍Java中的Socket编程,包括TCP和UDP协议的基础知识,以及如何使用Java的Socket和ServerSocket类创建客户端和服务器端的连接。 2. **I/O与NIO**:Java的I/O流系统是网络...
理解HTTP请求和响应的结构,以及如何使用Java实现HTTP客户端和服务器,是网络编程的重要内容。 9. **HTTPS和SSL/TLS**:网络安全是网络编程不可忽视的一环。HTTPS提供了安全的HTTP通信,而SSL/TLS协议用于加密数据...
【Java实现Web服务器详解...总之,Java通过其强大的网络编程API允许开发者构建自定义的Web服务器,理解HTTP协议和网络通信的基本原理是实现这一目标的关键。通过不断学习和实践,你可以创建出高效、可靠的Web服务系统。
在深入学习和理解这个项目之前,你需要具备基本的Java编程知识,了解HTTP协议,以及对Web服务器工作原理的一般性理解。通过阅读和分析源码,你可以学习到如何使用Java实现一个简单的Web服务器,这对于提升Java网络...
通过实践项目,如创建简单的聊天应用、文件传输服务或Web服务器,能加深对Java网络编程的理解,巩固所学知识。 总之,《JAVA网络编程大全》这本书涵盖了Java网络编程的各个方面,无论你是初学者还是经验丰富的...
Java是一种广泛使用的编程语言,尤其在开发Web应用程序和服务器方面有着强大的能力。"纯Java写的web服务器"是指完全使用Java...同时,这也是一种锻炼和提升Java编程技能,特别是网络编程和服务器开发技能的有效途径。
为了帮助读者更好地理解和应用所学知识,书中会包含一些实际的网络编程案例,如简单的文件传输服务、聊天室应用、Web服务器的实现等,这些都是提升实践能力的好途径。 总的来说,《Java网络编程》这本书全面地覆盖...
无论你是经验丰富的网络开发人员、Java程序员新手,还是只希望对Java网络编程稍有些了解的人,都会发现《Java编程(第三版)》将成为你的书库中一个重要的部分。一旦开始使用Java网络API,只要你能想到它就能够做...