客户端 使用TNMHTTP控件或其他方法 与服务器建立长连接(100)

  • 主题发起人 主题发起人 lx8598
  • 开始时间 开始时间
L

lx8598

Unregistered / Unconfirmed
GUEST, unregistred user!
客户端:Delphi开发 需求: 客户端 使用TNMHTTP控件 与服务器建立短连接 edit1.text:='http://www.sina.com/'; nmhttp1.Get(edit1.text); memo1.Text:=nmhttp1.Header; memo2.Text:=nmhttp1.Body; 调用事件 nmhttp1.Get(edit1.text); 后控件TNMHTTP的连接就断开了。 如果客户端 几百次的调用的话, 会很慢。 客户端写程序,有没有方法使 客户端和服务器端建立长连接? 即只连接一次。 工作完了,再断开。 可以使用其他方法或控件。在线等待......
 
HTTP协议的目的就是为了短连接设计的,因为WWW上的信息长度和通道大小都可能水师不固定,所以。。。
 
服务器端 java程序编写: 不停的读,直到收到客户端的停止的命令。在把处理的数据发送出去。/****begin********************************/ public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { int i = 0; System.out.println("/u5EFA/u7ACB/u8FDE/u63A5" + "begin"); res.getWriter().write("ok"); res.getWriter().write("/r/n"); res.getWriter().flush(); for (String r = null; (r = req.getReader().readLine()) != null;) if (!r.equals("")) { //System.out.println((new StringBuilder("/u6536/u5230/u5BA2/u6237/u7AEF/u4FE1/u606F")).append(r).toString()); //res.getWriter().write((new StringBuilder(String.valueOf(r))).append(" answer:").append(dateFormat.format(new Date())).toString()); //res.getWriter().write("/u6536/u5230/u5BA2/u6237/u7AEF/u4FE1/u606F"+"......"); String rs = exec(r); res.getWriter().write(rs + "..." + r); res.getWriter().write("/r/n"); res.getWriter().flush(); System.out.println(i + ".Print ReadLine. " + r); } System.out.println("/u65AD/u5F00/u8FDE/u63A5" + "end"); }/****end********************************/ 客户端 delphi: TidTCPClient 控件连接:procedure TDMNetReport.ConnetHttp;var headStr, reqStr: String; MainStr, HostStr, PostStr, UrlStr: String; urlPos: Integer;begin //解析IP地址和端口 http://localhost:9319/netreport MainStr := WriteNDFs.SubSplit(ServerLocation, '/',2); HostStr := WriteNDFs.SubLeft(MainStr, ':'); PostStr := WriteNDFs.SubRight(MainStr, ':'); if uppercase(HostStr) = 'LOCALHOST' then HostStr := '127.0.0.1'; PostStr := WriteNDFs.SubRight(MainStr, ':'); if PostStr = '' then PostStr := '80'; //解析url地址 http://localhost:9319/npt/calculateComet MainStr := WriteNDFs.SubSplit(ServerLocation, '/',3); urlPos := pos(MainStr ,ServerLocation); urlStr := copy(ServerLocation, urlPos, length(ServerLocation)-urlPos+1); headStr:='GET /'+urlStr+'/calculateComet HTTP/1.0'+#13#10; headStr:=headStr+'Cache-Control: no-cache'+#13#10; headStr:=headStr+'Connection: Keep-Alive'+#13#10; headStr:=headStr+'Content-Length: 999999'+#13#10; HTTPSOCK.Host := HostStr; HTTPSOCK.Port := StrToInt(PostStr); HTTPSOCK.Connect; HTTPSOCK.Writeln(headstr); try while (true) do begin reqStr := HTTPSOCK.ReadLn; if Trim(reqStr) = 'ok' then break; end; except HTTPSOCK.Disconnect; end;end;读写:function TDMNetReport.SendRequest(sSql: String): String;var recStr, ResultStr: String;begin Result := ''; HTTPSOCK.Writeln(sSql+#$D#$A); try while (true) do begin recStr := HTTPSOCK.ReadLn; ResultStr := ResultStr + recStr + #$D#$A; if pos('#E',recStr) >0 then break; end; except HTTPSOCK.Disconnect; end; result := ResultStr;end;
 
后退
顶部