如何写一个简单的HTTP服务器

如何写一个简单的HTTP服务器,第1张

本Guide利用Eclipse及Ant建立简单Web Service演示Web Service基本发程:

1系统条件:

Eclipse Java EE IDE for Web Developers

Java SE 6

Windows XP

2基本环境搭建:

1)Java SE6 JDK安装:载Java SE6 JDK双击安装默认选项进行安装即

2)Eclipse安装与配置:

安装直接解压

配置处两点Window>Preferences>Java>Installed JREs确保设置:

安装路径能略同

Window>Preferences>Java>Compiler 确保设置:

3建立Server端工程相关包与类:

创建Java Project命名wsServerHelloWorld:

项目建立包:orggnuhpcwsServer

包边建立类:SayHello

SayHellojava文件输入代码

package orggnuhpcwsServer;

import javaxjwsWebService;

@WebService

public class SayHello {

private static final String SALUTATION = "Hello";

public String getGreeting(String name) {

return SALUTATION + " " + name;

}

}

其注意@WebService 称作annotation或者metadataJava SE 5Web Services Metadata Specification引入Java SE 6于Web Services规范升级及JAX-WS(Java API for XML Web Services)20规范些升级使我Web Services创建调用变更加容易使用些新功能我仅仅使用简单Annotations注释Java类创建Web Services发者其类前用该annotations指定类告诉runtime engineWeb Service式操作使能该类annotations产布署Web ServiceWSDL映射annotationsJava源代码与代表Web ServiceWSDL元素连接起

4使用Ant产Server端代码:

首先项目新建文件:buildxml使用OpenWith>AntEditor打输入脚本代码:

<arg line="-cp /bin -keep -s /src -d /bin

orggnuhpcwsServerSayHello"/>

default指定默认执行Targetwsgen,wsgen创建能够使用WebService类所用于WebService发布源代码文件经编译二进制类文件WSDL符合规范该类WebService

Target名称wsgen具体执行命令参数:

-cp 类路径

-keep产java文件

-s 产源文件放哪

-d 产输问价放哪

使用Ant Build选项运行:

功执行提示我刷新Project

我Project区域看结:

5布Web Service

orggnuhpcwsServer建立类RunService:

package orggnuhpcwsServer;

import javaxxmlwsEndpoint;

public class RunService {

/

@paramargs

/

public static void main(String[] args) {

Systemoutprintln("SayHello Web Service started");

Endpointpublish("" ,

new SayHello());

}

}

运行Run As>Java Application我结说明web serviceServer端已经启

6查看WSDL:

Window>Show View>Other>General>Internal Web Browser其输入:wsdl

看看底WSDL都记录哪些信息看完停止该Server

7监测Server

我创建完Server用Eclipse Web Services Explorer监测Server

Window>Open Perspective>Other >JavaEE

打Eclipse Web Services Explorer

点击右角WSDL Page按钮:

单击WSDL MainURL输入:wsdl 按Go按钮现视图:

我触发Web Service操作:点击getGreetings添加参数比gnuhpc点击Go按钮:

8创建Client端 工程相关包与类:

创建Java Project命名wsClientHelloWorld项目建立包:orggnuhpcwsClient

9使用Ant产Client代码框架:

编写Web service使用工具利用WSDL进行调用客户端桩;或者使用底层API手编写Web service前者便者灵现我通前者做说明:

新建文件buildxml

New>File>buildxml

<arg line="-keep -s /src -p orggnuhpcwsClient

-d /bin wsdl"/>

注意:wsgen 支持 Java class 创建 Web serviceswsimport 支持 WSDL 创建 Web services别应于 JAX-RPC 式 Java2WSDL WSDL2Java要根据发布WSDL进行创建要先运行RunServer原

运行ServerRunService : Run As>Java Application>

运行该Ant脚本产Client代码:Run As>Ant Build

运行功提示:

代码:

步读取WSDL并客户端桩些桩我代码所用Java类接口些桩给服务器端功能提供客户端接口例我服务器提供Maths服务该服务带叫做add我客户端代码调用桩桩实现该使用参数封装Java调用变Webservice请求请求基于HTTP发送给服务器且使用SOAP作RPC协议监听服务器接收该SOAP消息(十八九)其转换服务器处调用

如果你使用的是WINDOWS XP专业版:

添加删除程序-安装WINDOWS组件-勾选INTERNET服务IIS,确定即可,等安装完毕打开浏览器,输入http://127001即可查看机器上的默认网站。

如果可能,最好安装WINDOWS 2000以上的服务器版(SERVER)操作系统。

正常,这才是服务器

首先确保装了Python,我装的是2x版本,对了,我的操作系统是WIN7,其实对于Python来说,什么操作系统并不重要。Python内置了一个简单的HTTP服务器,只需要在命令行下面敲一行命令,一个HTTP服务器就起来了:

python -m SimpleHTTPServer 80

后面的80端口是可选的,不填会采用缺省端口8000。注意,这会将当前所在的文件夹设置为默认的Web目录,试着在浏览器敲入本机地址:

如果当前文件夹有indexhtml文件,会默认显示该文件,否则,会以文件列表的形式显示目录下所有文件。这样已经实现了最基本的文件分享的目的,你可以做成一个脚本,再建立一个快捷方式,就可以很方便的启动文件分享了。如果有更多需求,完全可以根据自己需要定制,具体的请参见官方文档SimpleHTTPServer,或者直接看源码。我拷贝一段,方便参考:

import SimpleHTTPServer

import SocketServer

PORT = 8000

Handler = SimpleHTTPServerSimpleHTTPRequestHandler

httpd = SocketServerTCPServer(("", PORT), Handler)

print "serving at port", PORT

httpdserve_forever()

如果你想改变端口号,你可以使用如下的命令:

python -m SimpleHTTPServer 8080

如果你只想让这个HTTP服务器服务于本地环境,那么,你需要定制一下你的Python的程序,下面是一个示例:

import sys

import BaseHTTPServer

from SimpleHTTPServer import SimpleHTTPRequestHandler

HandlerClass = SimpleHTTPRequestHandler

ServerClass = BaseHTTPServerHTTPServer

Protocol = "HTTP/10"

if sysargv[1:]:

port = int(sysargv[1])

else:

port = 8000

server_address = ('127001', port)

HandlerClassprotocol_version = Protocol

httpd = ServerClass(server_address, HandlerClass)

sa = httpdsocketgetsockname()

print "Serving HTTP on", sa[0], "port", sa[1], ""

httpdserve_forever()

注意:所有的这些东西都可以在 Windows 或 Cygwin 下工作。

您可能感兴趣的文章:

用windows自带的IIS即可搭建http与ftp服务器。

搭建方法主要有以下大步骤,其中2~4步为核心内容:

1创建FTP账户

2添加IIS功能

3添加并设置HTTP与FTP服务器

4设置防火墙

5测试FTP上传及HTTP访问

此内容较长,由于知道版副有限,具体图文教程请阅:wwwwinbizcn/zh_cn/NewsDetail/42/772html

  转载 这种功能实际上就是数据同步,同时要考虑手机本身、电量、网络流量等等限制因素,所以通常在移动端上有一下两个解决方案:

  1一种是定时去server查询数据,通常是使用HTTP协议来访问web服务器,称Polling(轮询);

  2还有一种是移动端和服务器建立长连接,使用XMPP长连接,称Push(推送)。

  从耗费的电量、流量和数据延迟性各方面来说,Push有明显的优势。但是使用Push的缺点是:

  对于客户端:实现和维护相对成本高,在移动无线网络下维护长连接,相对有一些技术上的开发难度。

  对于服务器:如何实现多核并发,cpu作业调度,数量庞大的长连接并发维护等技术,仍存在开发难点。

  在讲述Push方案的原理前,我们先了解一下移动无线网络的特点。

  移动无线网络的特点:

  因为 IP v4 的 IP 量有限,运营商分配给手机终端的 IP 是运营商内网的 IP,手机要连接 Internet,就需要通过运营商的网关做一个网络地址转换(Network Address Translation,NAT)。简单的说运营商的网关需要维护一个外网 IP、端口到内网 IP、端口的对应关系,以确保内网的手机可以跟 Internet 的服务器通讯

  GGSN(Gateway GPRS

Support Node 网关GPRS支持结点)模块就实现了NAT功能。

因为大部分移动无线网络运营商都是为了减少网关的NAT映射表的负荷,所以如果发现链路中有一段时间没有数据通讯时,会删除其对应表,造成链路中断。(关于NAT的作用及其原理可以查看我的另一篇博文:关于使用UDP(TCP)跨局域网,NAT穿透的心得)

Push在Android平台上长连接的实现:

既然我们知道我们移动端要和Internet进行通信,必须通过运营商的网关,所以,为了不让NAT映射表失效,我们需要定时向Internet发送数据,因为只是为了不然NAT映射表失效,所以只需发送长度为0的数据即可。

这时候就要用到定时器,在android系统上,定时器通常有一下两种:

1javautilTimer

2androidappAlarmManager

分析:

Timer:可以按照计划或者时间周期来执行相关的任务。但是Timer需要用WakeLock来让CPU保持唤醒状态,才能保证任务的执行,这样子会消耗大量流量;当CPU处于休眠的时候,就不能唤醒执行任务,所以应用于移动端明显是不合适。

AlarmManager:AlarmManager类是属于android系统封装好来管理RTC模块的管理类。这里就涉及到RTC模块,要更好地了解两者的区别,就要明白两者真正的区别。

RTC(Real- Time Clock)实时闹钟在一个嵌入式系统中,通常采用RTC

来提供可靠的系统时间,包括时分秒和年月日等;而且要求在系统处于关机状态下它也能够正常工作(通常采用后备电池供电),它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32768KHz

晶体和电阻电容等。(如果对这方面感兴趣,可以自己查阅相关资料,这里就说个大概)

好了,回来正题。所以,AlarmManager又称全局定时闹钟。这意味着,当我用使用AlarmManager来定时执行任务,CPU可以正常地休眠,只有在执行任务是,才唤醒CPU,这个过程是很短时间的。

下面简单来说明其使用:

1类似于Timer功能:

//获得闹钟管理器

AlarmManager

am = (AlarmManager)getSystemService(ALARM_SERVICE);

//设置任务执行计划

amsetRepeating(AlarmManagerELAPSED_REALTIME, firstTime, 51000,

sender);//从firstTime才开始执行,每隔5秒再执行

2实现全局定时功能:

//获得闹钟管理器

AlarmManager

am = (AlarmManager)getSystemService(ALARM_SERVICE);

//设置任务执行计划

amsetRepeating(AlarmManagerELAPSED_REALTIME_WAKEUP, firstTime,

51000, sender);//从firstTime才开始执行,每隔5秒再执行

总结:在android客户端使用Push推送时,应该使用AlarmManager来实现心跳功能,使其真正实现长连接。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何写一个简单的HTTP服务器

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情