服务端开启某一端口,有很多对端往服务端发送数据,运行一段时间后(时间不定,有时长有时短)不能接收到任何数据,(但是用CommView来监测却可以看到有数据发送到这一端口),重启程序也没用,只有重启电脑才可以。另:服务端下发数据可能采用IdUDPServer.SendBuffer、ABinding.SendTo两种方式,INDY8、9、10都试过了
这个问题困扰了很久,一直找不到解决的办法
这个问题困扰了很久,一直找不到解决的办法
解决方案 »
- Cannot make a visible window modal/Delphi7的一个Bug处理
- 两个时钟分别起效,可以多线程吗?
- 基础问题 关于资源文件的限制问题 =============================================高分
- 在线等一个调试错误回答就给分谢谢!
- 如何提高远程访问的速度
- 100分求购delphi资料
- 老是有错!头暴了!!!
- 关于树
- 如何用代码实现Server数据库代码的连接等问题
- 高分:我想编写一个系统驱动器保护程序,当指定驱动器被读取或写入时,弹出一个密码框要求输入密码,怎么才能实现这个功能。
- 是控制access中的float类型的数据啊?
- 各位大哥,今天天气真好啊,问个问题先
但我认为像sendbuffer和readbuffer这样的函数,有数据,是能读的
不该会应为时间出问题的
Sender: TObject; AData: TIdBytes; ABinding: TIdSocketHandle);
var
lReceiveLen:integer;
lCurrentReceiveBuf:array of byte;
begin
lReceiveLen:=Length(AData) ;
setlength(lCurrentReceiveBuf, lReceiveLen );
Move(AData[0],lCurrentReceiveBuf[0],lReceiveLen); if assigned(FOnSocketReceiveBuf) then
begin
FOnSocketReceiveBuf(self,lCurrentReceiveBuf, lReceiveLen);
end;
...
处理数据
end;处理数据过程一般会有回应数据,通过ABinding.SendTo发送回应数据
另外的数据发送使用FIdUDPServer.SendBuffer(PeerIP,PeerPort,lContentBuf);
发数据使用IdUDPClient,或使用ABinding.SendTo,严格遵循这些约定,
就算运行很久也不会有问题的。
我的一个应用,运行了好久了,还没有发现问题
IdUDPServer每触发一次read的事件,在事件处理里新建一个线程,在线程里处理其它事件
还有一个需要注意的是,不要忘了放上一个IdAntiFreeze控件,祝好运!
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
begin
TServiceThread.Create(AData,ADOConnection1,ABinding);
end;