我正在使用idTCPServer处理数据。 对于一个新设备,我需要将移交给一个dll的套接字(停止tcp服务器从该套接字读取)。TCP服务器:移交套接字连接
Indy或ICS可能吗?
[编辑] 出于测试目的,我做了一个线程而不是使用dll,因为缺少硬件。
procedure TfrmIndyMain.IdTCPServer1Connect(AContext: TIdContext);
begin
FMyThread := TMyThread.Create(true);
FMyThread.FSocket := AContext.Binding.Handle;
FMyThread.Resume;
end;
procedure TfrmTest.IdTCPServer1Execute(AContext: TIdContext);
begin
// Its necessary that indy stop reading from the socket, without reset a lot of messages is lost
AContext.Binding.Reset(false); //not sure if this is correct
end;
procedure TMyThread.Execute;
var
len: integer;
data: string;
begin
ioctlsocket(FSocket, FIONREAD, len);
if len>0 then
begin
Setlength(data, len);
if recv(FSocket, pointer(data)^, len, 0) <> SOCKET_ERROR then
Log('Data: ' + data)
else
Log('Error');
end;
end;
雷米,我更新了我的问题。我有时会丢失数据.... – 2012-03-04 11:22:24
感谢您的更新。也许我的问题不够清楚,但对于1种类型的设备,DLL正在处理套接字。在这种情况下,我希望indy停止阅读套接字(某种'双手'或'交给dll')。该DLL是第三方库需要一个插座。将我的测试代码移动到一个单独的线程中,并在OnExecute中创建一个无限循环,以便读取所有消息。或者AContext.Binding.Reset(false);不知道这是否是正确的方法。 – 2012-03-04 19:38:59