服务器是ASP+IIS
不可改动,只提供消息接口
客户端要做成窗口界面
也算是C/S模式吧?问题:
客户端post方式提交数据,这个没大问题,可以用idHttp实现。但是,在服务端处理完数据之后要返回消息,也是post方式,且需要一个url地址,客户端应该怎样做才能实现?应该用何组件?还是只能用网站?如果有例子最好,本人delphi新手,谢谢!
不可改动,只提供消息接口
客户端要做成窗口界面
也算是C/S模式吧?问题:
客户端post方式提交数据,这个没大问题,可以用idHttp实现。但是,在服务端处理完数据之后要返回消息,也是post方式,且需要一个url地址,客户端应该怎样做才能实现?应该用何组件?还是只能用网站?如果有例子最好,本人delphi新手,谢谢!
解决方案 »
- 有人帮我编写一款“软件安装管理器”吗?
- Either Eof or Bof is True,or the Current Record Has Been Delete(500分)
- 用Image.picture.savetofile方法保存的bmp文件为什么不能被photoshop文件打开?
- 短信接收器支不支持多线程?
- 我要快疯了!使用Table.AddIndex()方法建立表索引的问题详述,请行家里手指点!
- 我用Pointer类型传递了TXXX的Create函数的地址,但如何调用呢??
- delphi的语句怎么调用DOS命令
- 请问如何读一个INI文件,和写一个INI文件
- 请教控件的安装
- (特急,特刺激) 如何不显示开始菜单...
- 谁有个个风格的图标啊 求。。。
- 夜猫子来接分
如果ASP网站要用post方式向客户端返回操作结果等消息,如果客户端也是ASP网站,则应有一个专门接收操作结果的页面,比方说是backurl.asp,那么服务端也就是调用http://www.client.com/backurl.asp?esult=xxx&result2=xxx&……
那么,如果客户端不用ASP网站做,而用delphi做成窗口界面,应该怎么办?怎样才能实现接收服务器post 来的消息(服务端是不可改变的,因为是要接入人家的系统,人家是不会给改的)
好像不是这么简单地
服务器网站还要主动给客户端发送数据的
不只是客户端请求后返回数据
这样用idHttp行吗?
我实现了
http://www.boomkit.cn
http://blog.csdn.net/sz_haitao/archive/2009/09/10/4539228.aspx
从你的这段描述来看, 服务端是按HTTP协议在调用客户端的页面, 而不是你前面所说的用post方式向客户端返回操作结果。说实话,没看明白你的意图。
那么,如果客户端不用ASP网站做,而用delphi做成窗口界面,应该怎么办?怎样才能实现接收服务器post 来的消息(服务端是不可改变的,因为是要接入人家的系统,人家是不会给改的)
这东西已经基本没有人搞了 很多接口什么的 都已经落后太多了
如果你用最新的JAVA 或 .NET 平台 比delphi不知道要快多少倍
bool bRet = false;
CString strServer, strObject, strHeader, strRet;
unsigned short nPort;
DWORD dwServiceType;
CString strUrl = _T("http://localhost:1000/test.aspx");
CString strPara = _T("UserName=guan&passwd=123"); CString strContent=_T(""); if(!AfxParseURL(strUrl, dwServiceType, strServer, strObject, nPort))
{
strDescript = strUrl + _T("不是有效有网络地址!");
AfxMessageBox(strDescript);
return ;
}
CInternetSession sess;//Create session CHttpFile* pFile;
//////////////////////////////////////////////
CHttpConnection *pServer = sess.GetHttpConnection(strServer, nPort);
if(pServer == NULL)
{
strDescript = _T("对不起,连接服务器失败!");
AfxMessageBox(strDescript);
return ;
}
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,strObject,NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT);
if(pFile == NULL)
{
strDescript = _T("找不到网络地址") + strUrl;
AfxMessageBox(strDescript);
return ;
} // pFile -> AddRequestHeaders("Content-Type: text/xml; charset=utf-8");
pFile -> AddRequestHeaders(_T("Content-Type: application/x-www-form-urlencoded"));
pFile -> AddRequestHeaders(_T("Accept: */*"));
pFile -> SendRequest(NULL, 0, (LPTSTR)(LPCTSTR)strPara, strPara.GetLength()); CString strSentence;
DWORD dwStatus;
DWORD dwBuffLen = sizeof(dwStatus);
BOOL bSuccess = pFile->QueryInfo(
HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER,
&dwStatus, &dwBuffLen); if( bSuccess && dwStatus>= 200 && dwStatus<300)
{
char buffer[2049];
memset(buffer, 0, 2049);
int nReadCount = 0;
while((nReadCount = pFile->Read(buffer, 2048)) > 0)
{
strContent += buffer;
memset(buffer, 0, 2049);
}
bRet = true;
}
else
{
strDescript = _T("网站服务器错误") + strUrl;
AfxMessageBox(strDescript);
bRet = false;
}
////////////////////////////////////////
AfxMessageBox(strContent);
pFile->Close();
sess.Close();
服务端能用POST回送数据,这意味实现"推"的功能,这是B/S所不能作到的,也是C/S的优点。一般C/S系统,C端与S端的通信一般是不用HTTP协议的方式的。而你这里要S能POST回信息,即要用类视HTTP协议的方式来传,也是可以的。
谢谢iuIRCClient的耐心回复。
我要做的东西确实需要服务器调用客户端进行post,客户端也是有固定IP的,不在内网。
当然这个服务端不是我设计的,如果是我设计不会搞成这种形式的,但是我无能为力,因为现在是我的老板求人家,我只能在这种框架下开发。实在不行只能IIS+ASP了,这样密合得会更好点吧。
关于推技术,iuIRCClient这样一说我似乎明白了一些,这个跟普通的TCP连接很相似,只是客户端也有侦听端口主动创建连接的功能,而不只是发送请求接受确认的功能吧,形象一点说就是“服务端双头蛇”吧。呵呵,研究中……
客户端与服务器端建立了tcp长连接,是解决"推"问题的一种方法,且是一种不很完美的方法。
偶不想用ASP+IIS,这种方式太繁琐,可移植性差(因为要稳定的话OS要用win的server版本)
如果用delphi能实现是最理想的选择了
一个独立窗体在XP下随意下载安装……继续等待delphi达人出现~
只能用ASP做了
再等最后一天
明日结帐
Indy中的个Demo,看看就明白了。
icoffer,一个非常好的东西,不知道的到百度搜搜
一个可以相互分享文件、文档、照片、音乐,3G的永久空间、5G的临时空间,还可以升级呢! 相册,在线听歌,每天还可以免费领取空间哦……
怎么样?试试吧!
这种方法无法完全实现
因为C端提供了backurl后
服务端要不只一次主动去post 消息
不是C请求S返回那么简单的
而是反过来的