IdUDPServer问题

ljking0731 2011-06-24 03:43:23

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,否則會有此錯誤訊息出現。


这个到底是啥问题呀
...全文
272 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljking0731 2011-06-29
  • 打赏
  • 举报
回复
是我创建完对象后,没释放,谢谢哈
bzworinima 2011-06-27
  • 打赏
  • 举报
回复
FIdUDPServer := TIdUDPServer.Create(nil);
-----------------------------------------------------------------

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;
ljking0731 2011-06-25
  • 打赏
  • 举报
回复
没人知道吗?
ljking0731 2011-06-24
  • 打赏
  • 举报
回复
不行呀,能否帮我改下上面的代码
bzworinima 2011-06-24
  • 打赏
  • 举报
回复
inherited Destroy();

释放完自定义的内容
继承父类的释放
ljking0731 2011-06-24
  • 打赏
  • 举报
回复
到底是啥问题...

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧