indy: idudpserver的问题,知道的进来看看

就只有90分了,都放出来

1.IdUdpServer 的active设置为true跟false有什么区别,好像都可以发送消息?

2.
我在一个按钮里面
发送消息 SendBuffer 然后又 ReceiveBuffer
我想知道有没有问题,对方发送消息过来了,那么是
ReceiveBuffer收到呢?还是在UDPRead(这个事件里面里面也有处理代码)
里面收到呢?还是怎么回事
搞不清楚

高手讲讲他是怎么工作的,谢谢!
...全文
331 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pitot 2005-05-29
  • 打赏
  • 举报
回复
通过TIdSocketHandle.SetSockOpt 可以设置SO_REUSEADDR参数可以绑定到已用端口。
hongqi162 2005-05-18
  • 打赏
  • 举报
回复
1:是的,只有active:=true后在启动IdUDPServer1UDPRead线程
2:两个地方不可能同时监听同一端口,会提示端口已被占用
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EIdCouldNotBindSocket with message 'Could not bind socket. Address and port are already in use.'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
不用给我代码,给我解释就行了

是不是Active:=true;后才启动IdUDPServer1UDPRead线程?

还有就是当read接受,其他地方又用ReceiveBuffer接受,到底哪里接受到了?
希望能给我解释清楚
hongqi162 2005-05-17
  • 打赏
  • 举报
回复
//监听9000端口
self.IdUDPServer1.DefaultPort:=9000;
self.IdUDPServer1.Active:=true;
//接收数据
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
RevStream:TMemoryStream;
AMsg:TFileMessage;
begin
if AData=nil then exit;
RevStream:=TMemoryStream.Create;
RevStream.LoadFromStream(AData);
RevStream.Seek(0,soFromBeginning);
RevStream.Read(AMsg,sizeof(AMsg);
RevStream.Free;
end;
//发送数据
self.IdUDPServer1.SendBuffer('192.168.0.1',9900,AMsg,sizeof(AMsg));

1,594

社区成员

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

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