Delphi做Http应用真的不好做,网上几乎都是用IdHttp,但IdHttp问题BUG多多,做一般的客户端应用还可以,对要求稳定可靠,能7*24小时*365天不当机的服务端程序来说,此控件问题太大,我曾尝试用WinInet底层函数(InternetOpen+InternetConnect+HttpOpenRequest)来写,但此接口不提供超时控制,还要自己写控制代码,实在麻烦,现求一能用TClientSocket控件实现数据收发之方法,因我对TClientSocket性能掌握较熟,但对HTTP之通讯协议不甚了解,望高人指点。

解决方案 »

  1.   

    俄滴平台是XE,都没有这个组件了:)替代版本应该是TCPClient。哈哈,言归正传。
    楼主的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都不用考虑了
      

  2.   

    我还是自己用winInet,用SingleWaitObject解决超时了,哎delphi版真是没人了,一个问题放了N天还是在首页