我正在使用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