TClientSocket与TServerSocket的多线程问题? ( 积分: 100 )

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

loskiller

Unregistered / Unconfirmed
GUEST, unregistred user!
服务端部分代码:
TFileServerThread=class(TServerClientThread)
public
procedure ClientExecute;override;
end;

procedure TFileServerThread.ClientExecute;
var
r:shortint;
begin
inherited;
r:=-3;
self.ClientSocket.SendBuf(r,1);
self.ClientSocket.Close;
end;

s:=TServerSocket.Create(nil);
s.ServerType:=stThreadBlocking;
s.Port:=13013;
s.OnGetThread:=DOOnGetThread;
s.Active:=true;

procedure TForm1.DOOnGetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
SocketThread:=TFileServerThread.Create(false,ClientSocket);
end;

客户端代码:
procedure TForm1.Button1Click(Sender: TObject);
var
b:shortint;
begin
b:=0;
c:=TClientSocket.Create(self);
c.Address:='127.0.0.1';
c.ClientType:=ctBlocking;
c.Port:=13013;
c.Active:=true;
c.Socket.SendText('abc');
c.Socket.ReceiveBuf(b,1);
c.Close;
c.Free;
showmessage(inttostr(b));
end;
当运行客户端时,代码走到 c.Socket.ReceiveBuf(b,1);这里就不动了。郁闷啊。
 
网络接受并不像机子执行代码那样快,它是有TCP/IP来完成的,它是消耗时间的,没有程序执行代码快,建议加上超时,再跟踪程序,看看服务端收到abc没?跟踪到底是那个出的问题;
 
在客户端里当c.Active:=true;时就会触发DOOnGetThread事件,现在直接用socket api写了,郁闷。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
604
import
I
后退
顶部