怎样用两个线程访问web服务器? (50分)

  • 主题发起人 主题发起人 视觉音乐
  • 开始时间 开始时间

视觉音乐

Unregistered / Unconfirmed
GUEST, unregistred user!
用多线程访问一个主页时,会提示地址和端口正在使用,出错。
谁可以指点一二,或者有小例子给偶看看,不胜感激!
只开一个线程可以。
 
day day up~~~~~~~~~
 
datasnap页的连接控件
 
多谢,偶再试试~~
 
用多线程访问一个主页时,会提示地址和端口正在使用,出错。
谁可以指点一二,或者有小例子给偶看看,不胜感激!
只开一个线程可以。
 
明白一些了。原来是多线程访问!不知您为何用到多线程访问主页,
我想没必要吧,是否必须?关注
 
我们帮人做了一个服务器,要放到电信局去,想先测一下,看能最多支持多少人访问。
所以要写一个多线程访问web的小程序。
:)
 
若服务器作成midas或mts,则用多个webconnecttion测试没问题,我作过,可支持几百个
,和内存大小有关.关注
 
idhttp,在县城中create,get(url),free;用个按纽一直点,没出现你说的情况.
是否可把你的代码贴一段出来,看看
 
换成其它的试试,出现什么情况?
 
估计问题是很大的,呵呵,请老兄给指点指点:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, IdIntercept, IdSSLIntercept, IdSSLOpenSSL,
IdLogBase, IdLogDebug;
type
TForm1 = class(TForm)
Button1: TButton;
HTTP: TIdHTTP;
memoHTML1: TMemo;
cbUrl: TComboBox;
memoHTML2: TMemo;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
function ylb(p:pointer):longint;stdcall;
var
i:integer;
dc:hdc;
begin
form1.memoHTML1.Clear;
form1.memoHTML1.Lines.Text := form1.HTTP.Get(form1.cbURL.Text);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
memoHTML1.Clear;
memoHTML1.Lines.Text := HTTP.Get(cbURL.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
hthread:thandle;
threadid:dword;
intTotalThread ,i: Integer;
begin
intTotalThread := StrToInt(trim(Edit1.Text));
threadid := 1;
for i :=1 to intTotalThread do
begin
hthread:=createthread(nil,0,@ylb,nil,0,threadid);
Label1.Caption := IntToStr(i);
end;
end;

end.
 
问题很大。
多先成中,用全局变量应特别小心。http最好用局部变量,create,use,free,
memo应注意同步.
我使用先成,一般是使用delphi的类,不使用create先成.
 
看来是公司的项目,不好给你源马,否则的话,20分钟就帮你搞定(应该用不了)。
看你这么急,还是人不住致电一二。
 
老兄,你是我的救命稻草啊!!! :)
帮我一把吧。
200分相赠!
 
程序很简单,只擦没写出来了,你得抓近学习,才行有。
基本代码如下,除了memo没做同步外,其他都ok,既然是测试,也就无所谓了。
当然自己应知道这段代码还不是很晚三。
如测试多个,可写个循环,不停的button1.click;
希望大家共同进步。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, StdCtrls;
type Thsj=class(TThread)
private
protected
procedure Execute;override;
public
constructor Create();
end;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
procedure Thsj.Execute;
var http:Tidhttp;
begin
http:=Tidhttp.Create(nil);
try
form1.memo1.Text:=http.get('http://www.sohu.com');
except
on e:exception do
begin
application.messagebox(pchar('提交失败!'+#13+e.message),'警告',0);
end;
end;
http.free;
end;
constructor Thsj.Create();
begin
FreeOnTerminate := True;
inherited Create(False);
end;
procedure TForm1.Button1Click(Sender: TObject);
var th:Thsj;
begin
th:=Thsj.Create;
end;
 
好的,我搞定后马上给你分。
这几天在狂学notes,来不及仔细研究多线程,只是想随便写一个先测一下,
回头再细学,多谢老兄了!
 
接受答案了.
 
后退
顶部