在线程里,可以动态创建Socket吗?(100分)

  • 主题发起人 主题发起人 ccoomm
  • 开始时间 开始时间
C

ccoomm

Unregistered / Unconfirmed
GUEST, unregistred user!
我希望在线程里动态创建ClientSocket,以下是一段测试代码:
procedure SThread.Execute;
var
SS:TClientSocket;
begin
SS := TClientSocket.Create(nil);
SS.Address := '16.207.128.99';
SS.Port := 4000;
SS.ClientType := ctNonBlocking;
SS.Host:='';
SS.Service:='';
SS.Tag:=0;
SS.Active := True;
if SS.Active then
Form1.Edit1.text:= '连接到:'+SS.Socket.RemoteHost
else
Form1.Edit1.text:='socket没有激活';
end;
由于是测试,没有用synchronize进行同步。但是Edit1总是显示“socket没有激活”,
请问:能在线程里动态创建ClientSocket,并且激活它吗?
 

var
Servers:array[0..50] of TClientSocket;
i:integer;
implementation
{$R *.dfm}
procedure SThread.Execute;
begin
SS := TClientSocket.Create(nil);
SS.Address := '16.207.128.99';
SS.Port := inttostr(4000+i);
SS.ClientType := ctNonBlocking;
SS.Host:='';
SS.Service:='';
SS.Tag:=0;
SS.Active := True;
if SS.Active then
Form1.Edit1.text:= '连接到:'+SS.Socket.RemoteHost
else
Form1.Edit1.text:='socket没有激活';
end;

呵呵,,给我一个思路,采用数组的方式。我上面代码只是略改了一下,一定是不行的。你试着这个思路试一下。
 
经过我测试,如果把SS.ClientType 的值改为 ctBlocking,就能激活这个Socket。但是,
新的问题也出来了:我创建的是AstaClientSocket,我用这个第三方控件,但这个控件的
ClientType应该设为 ctNonBlocking!如果我把它设为ctBlocking,就很难从AstaServerSocket
端读取到数据!现在,我想问:
我能否在线程里动态创建ClientSocket,并且把它的ClientType设置为ctNonBlocking方式的
,而且ClientSocket是激活的?
 
ClientSocket.openthesocket方法即可.
 
我也碰到相同的问题,我后来改为 ctBlocking了,我用的是indy.
 
接受答案了.
 

Similar threads

后退
顶部