TTest = class(TComponent)
private
FIdUDPServer: TIdUDPServer;
public
constructor create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Active(Port: Integer);
end;
{ TTest }procedure TTest.Active(Port: Integer);
begin
FIdUDPServer.DefaultPort := Port;
FIdUDPServer.Active := True;
end;constructor TTest.create(AOwner: TComponent);
begin
inherited;
FIdUDPServer := TIdUDPServer.Create(self);
FIdUDPServer.BufferSize := 4096;
FIdUDPServer.ThreadedEvent := True;
end;destructor TTest.Destroy;
begin
if Assigned(FIdUDPServer) then
begin
FIdUDPServer.Active := False;
FIdUDPServer.Free;
end;
inherited;
end;
//调用后,关闭窗体会出现 socket Error #10093的错误
procedure TForm1.Button5Click(Sender: TObject);
begin
FSerTest := TTest.create(nil);
FSerTest.Active(23323);
end;在网上查找10093错误解释:應用程式沒有呼叫WSAStartup()或是呼叫WSAStartup()失敗。應用程式要成功地呼叫WSAStartup()才能使用WinSock.DLL,否則會有此錯誤訊息出現。
这个到底是啥问题呀
继承父类的释放
-----------------------------------------------------------------type
TSocketSvr = class
FIdUDPServer: TIdUDPServer;
private
procedure UDPServerRead(AThread: TIdUDPListenerThread; AData: TBytes;ABinding: TIdSocketHandle);
procedure SetTransPort(const Value: UINT);
function GetActived: boolean;
procedure SetActived(const Value: boolean);
public
constructor Create;
destructor Destroy;
published
property TransPort: UINT read FTransPort write SetTransPort;
property Actived: boolean read GetActived write SetActived;
end;constructor TSocketSvr.Create;
begin
try
FIdUDPServer := TIdUDPServer.Create(nil);
FIdUDPServer.DefaultPort := 3000;
FIdUDPServer.OnUDPRead := UDPServerRead; //我用XE OnUDPRead 事件与泛型有冲突,只能引用事件
FIdUDPServer.ThreadedEvent := true; //如果为FALSE 监听不到事件
except
end;
end;destructor TSocketSvr.Destroy;
begin
FIdUDPServer.Active := false;
FIdUDPServer.Bindings.Clear;
FIdUDPServer.Free;
SocketSvr := nil;
end;procedure TSocketSvr.UDPServerRead(AThread: TIdUDPListenerThread;AData: TBytes; ABinding: TIdSocketHandle);
begin
try
if not AThread.Terminated then
begin
//处理数据......
Sleep(LockDelay);
end;
finally
mySocketProcesser.Free;
end;
end;