如何在程序中建立WEB服务器(100分)

  • 主题发起人 主题发起人 caowei
  • 开始时间 开始时间
C

caowei

Unregistered / Unconfirmed
GUEST, unregistred user!
WIN2000下,已经安装了IIS,我怎么在程序里面建立一个指定端口的WEB SERVER?
另外,如何检测该端口的SERVER是否已经存在?
 
winshoes demo
 
》》如何检测该端口的SERVER是否已经存在?
telnet 127.0.0.1 80
如果连接上,使用GET /等HTML语言可以返回HTML文件
如果连接不上,说明该端口的SERVER不存在

或直接在IE里打进127.0.0.1:80如果有页面返回,说明该端口的有SERVER存在,反之没有

改变IIS服务端口可在INTERNET SERVICE MANAGER里选择WEB站点-》属性里修改TCP端口即可

 
我是要在程序里面建立.....
 
怎么没有人知道么?
 
回答我啊!!!!!
 
我也很想知道,可惜只做了一半没完成,实在是。。。。。。
 
使用INDY里的相应控件,即可。
 
建议:
手工建一个,然后比较一下注册表之类的系统配置。
建议用注册表监理软件。
 
请看 新概念离线阅读 - 通向大富翁之门 的源码.
其中包含了一个基于 ICS 的 Web Server,使用 808 端口.
http://www.delphibbs.com/delphibbs/dispq.asp?lid=547608
 
是自己写的WEB SERVER吗?
我是要在IIS里面建立一个WEB SERVER,不是自己编写一个.....
谢谢!!!!!!!
 
有没有搞错,他只是想让自己的程序在iis中建立一个web server而已,什么这么多老大都
叫他自己写webserver?
有个回答过了
aimingoo (2000-09-25 14:45:47)
大师的方法需要安装Script Host。在WinNT SP6+IE4.x的环境中是不带的,需要另装Script Host
或者安装IE5.x。这需要注意。

下面公布我的方法。——原本是昨天公布的,不过太忙。哈哈,就……

首先确认,API是绝对解决不了这些问题的,必须使用COM,使用ADSI接口。
在WinNT/System32下的adsiis.tlb是MS封装的ADSI公开接口,非常的全,也非常之庞大。你可
以使用它,也可以去这儿下载一个公开源码的ADSI COM控件。但是,它是C写的。
ftp://ftp.15seconds.com/990107.zip
打开990107.zip,用regsvr32.exe myadsi.dll注册这个控件。然后,你就可以开始用Delphi
干活儿了。

一、生成接口文件
------------------------------------------------------------------------
由于myADSI.dll不是OCX/EXE方式的ActiveX服务,所以,必须手工生成TLB接口文件。
运行/Delphi/BIN目录的TLIBImp.exe文件。如下:
tlibimp -L+ MyADSI.dll
// L+参数是生成能够在Delphi的IDE环境中使用的可视组件。可选。
// 如果你使用adsiis.tlb,也需要用tlibimp来生成接口文件。
这个控件的编写者有病,会将COM控件命名为Contorl,生成的Delphi类名叫TControl,与
Delphi自己的一个控件会冲突,所以你需要打开生成的myADSILib_TLB.pas文件,将所有的
TControl替换成TIISControl。就成了。——你也可以不替换,但出了问题可被怪我。 :)

二、安装组件
------------------------------------------------------------------------
安装myADSILib_TLB.pas到组件板,与普通操作无二。不讲了。

三、编程
------------------------------------------------------------------------
太简单了。 ^-^。下面假设控件名:IISConfig
var selectDir : integer; //示例中用来控制创建的虚拟目录类型。
procedure TMainForm.Button1Click(Sender: TObject);
const //Permissions Const, From MSDN.
IISReadAccess = 1;
IISWriteAccess = 2;
IISExecuteAccess = 4; //(including ScriptAccess)
IISScriptAccess = 512;
var
VDirName : string;
begin
VDirName := Edit1.Text;
if (VDirName='') or (VDirName[1]='/') then
begin
showMessage('虚拟目录不能为空, 且第一个字符不能为''/''.'#$0D'请重新填写.');
exit;
end;

IISConfig.Site := 1; //如果IIS中有多个Web Site,这里可选。
IISConfig.Connect;
try
if BOOL(IISConfig.ExistsVDir(VDirName))
then showMessage('对不起, 该虚拟目录已经存在.'#$0D'不能创建虚拟目录.')
else
case selectDir of
1 : //普通目录
begin
IISConfig.Permissions := IISReadAccess;
if not BOOL(IISConfig.CreateVDir(WideString(PBF.Folder), WideString(VDirName))) then
showMessage('对不起, 未知情况导致虚拟目录不能成功创建.');
end;
2 : //脚本目录
begin
IISConfig.Permissions := IISExecuteAccess;
if not BOOL(IISConfig.CreateVDir(WideString(PBF.Folder), WideString(VDirName))) then
showMessage('对不起, 未知情况导致虚拟目录不能成功创建.');
end;
end;
finally
IISConfig.Disconnect;
end;
end;

就这样啦。不难的。
TIISControl主要有三个功能:CreateVDir(), ExistsVDir(), DeleteVDir()。
OnStartPage()和OnEndPage()两个功能我也没有太搞明白,好象是设置ASP的起始和结束页的。
Permissions设置的全部定义是:
{ //Define In MSDN
MD_ACCESS_READ 0x00000001 Allow read access.
MD_ACCESS_WRITE 0x00000002 Allow write access.
MD_ACCESS_EXECUTE 0x00000004 Allow file execution (includes script permission).
MD_ACCESS_SOURCE 0x00000010 Allow source access.
MD_ACCESS_SCRIPT 0x00000200 Allow script execution.
MD_ACCESS_NO_REMOTE_WRITE 0x00000400 Local write access only.
MD_ACCESS_NO_REMOTE_READ 0x00001000 Local read access only.
MD_ACCESS_NO_REMOTE_EXECUTE 0x00002000 Local execution only.
MD_ACCESS_NO_REMOTE_SCRIPT 0x00004000 Local host access only. }
但注意MyASDI中的Permissions是smallInt类型的。小有区别啦。 ^-^

四、其它
------------------------------------------------------------------------
如果你要发布软件的话,当然不能要用户自已去运行regsvr32.exe来注册MyADSI.dll了。
如果你不是使用专门的安装工具来做这件事的话,你可以用一段小程序来完成这件事。
type
TRegisterMode = (regRegister, regUnregister);
function OLERegisterDLLFile (strFileName : STRING; mode : TRegisterMode) : BOOLEAN;
type
TOleRegister = function : HResult;
var
hLib : THandle;
fnAdr: TFarProc;
begin
Result := FALSE;
hLib := LoadLibrary(PCHAR(strFileName));
if (hLib > 0) then
begin
try
if (mode = regRegister) then
fnAdr := GetProcAddress(hLib, pchar('DllRegisterServer'))
else
fnAdr := GetProcAddress(hLib, pchar('DllUnregisterServer'));
if (fnAdr <> nil) then
Result := (TOleRegister(fnAdr) >= 0);
finally
FreeLibrary(hLib);
end;
end;
end; { RegisterDLLFile }

OLERegisterDLLFile()函数可以加到TForm.onCreate和TForm.onClose事件中。即可以完成
自动注册和卸载。
好了。用Delphi简单吧?^-^

五、关于ASP
------------------------------------------------------------------------
需要的话,去查MSDN,关键字:“Virtual directories, creating”。也可以去MS的MSDN网
站,查“Create a Virtual Directory Automatically with ADSI”,就成了。
不会要我将这个也贴上来吧?哈哈哈。

 
不对,不对,这样不是要IIS环境才行。
 
一个简单的方法:使用ServerSock控件创建一个访问端口,
在OnClientRead事件里截取来自IE的访问信息即可。
哈哈!给分吧。
 
本来就是问如何在iis下建立一个webserver,而不是自己写webserver
 
honghs的有道理,让我测试一下先......
 
谁有具体的在IIS中建立WEB SERVER的代码?
 
接受答案了.
 
后退
顶部