Delphi做Http应用真的不好做,网上几乎都是用IdHttp,但IdHttp问题BUG多多,做一般的客户端应用还可以,对要求稳定可靠,能7*24小时*365天不当机的服务端程序来说,此控件问题太大,我曾尝试用WinInet底层函数(InternetOpen+InternetConnect+HttpOpenRequest)来写,但此接口不提供超时控制,还要自己写控制代码,实在麻烦,现求一能用TClientSocket控件实现数据收发之方法,因我对TClientSocket性能掌握较熟,但对HTTP之通讯协议不甚了解,望高人指点。
楼主的ClientSocket是连的自己的网站,还是?ClientSocket是和ServerSocket成对使用的,如果是访问自己的网站,使用ServerSocket还不如用三层DataSnap来得可靠。如果不是的话,没有相应的服务,ClientSocket工作起来实在麻烦。转点资料:
Socket是对网络层操作
TcpClient是对传输层操作
ASP.NET是对会话层操作
你可以用Socket访问IIS中的ASP.NET的页面,不过传输层,会话层的转换就要你自已用代码实现了
如果你用Socket访问IIS,要做如下考虑:
网络层:
使用什么网络层协议,如IPV4还是IPV6;如果开发路由器也要考虑这个问题
传输层:
你要使用那种传输层协议,比如是TCP.
会话层:
你要使用那种会话层协议,如HTTP.也就是说你可以用
Socket类.Send方法 发送如下字串的二进制到IIS
//
GET /?T1=234&T2=789&B1=%CC%E1%BD%BB HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)
Host: 192.168.0.2:81
Connection: Keep-Alive
//
你会收用Receive到如下数据:
//
HTTP/1.0 200 OK
MIME_version:1.0
Content_Type:text/html
Content_Length:N[input type=button]
//
然后你可以将此数据解析成一个HTML页的按钮
///////////////////////////////////////////////////////////
上面的操作就是:
网络层-----会话层,用Socket访问IIS中的ASP.NET的页面
传输层,会话层的转换自已用代码实现了
但是要这样做,WEB开发人员会死的很惨,所以WEB开发只要实现[会话层-----会话层]就可以了
他要要做的只是[form] 到IIS,Response到客户端。
而到了WebService的Method开发时,Response都不用考虑了