再发百分,求教TIdUDPServer与TIdUDPClient的问题!

dinggosumsung 2006-07-06 01:13:51
1、我用TIdUDPClient发送数据,用TIdUDPServer接收数据,用TIdUDPClient发送数据没有问题,但是用TIdUDPServer接收数据却接收不到数据(OnUdpRead事件),会是什么原因?

2、TIdUDPServer与TIdUDPClient都没有本地端口的设置,原来用的TNMUDP可以设置本地端口,那么用TIdUDPServer与TIdUDPClient时是从哪个端口接收数据的?

3、TIdUDPClient有个ReceiveTimeOut属性,看帮助似乎是会在设定的时间范围内等待回复信息!那么等待的这段时间不能发送数据吗?对这个属性的作用一直都不是太理解,因为我觉得等待发送过来的信息就是程序开着就开始等待信息了,为什么要设置一个时间限制?关于这个属性的作用,请大家帮忙解释一下,谢谢!
...全文
927 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinggosumsung 2006-07-08
  • 打赏
  • 举报
回复
问题解决,结贴,谢谢各位的帮助~
dinggosumsung 2006-07-07
  • 打赏
  • 举报
回复
去了楼上的BLOG,下了源码,研究中~
呵呵
谢谢
huzhangyou 2006-07-07
  • 打赏
  • 举报
回复
去我得博客
里面的 信仰的推荐代码库 [13]
有一个我最新开发的UDP GPS Server源代码
本来是公司内部使用的
不能公开
但是学习目的
可以去下载源代码的
http://blog.libing.net.cn

里面有使用的一些细节问题
dinggosumsung 2006-07-06
  • 打赏
  • 举报
回复
呵呵,我的问题都是两位帮忙解答的,谢谢了
不过还有个问题,就是如何使用TIdSocketHandle的sendto方法来发送数据?
还请再帮帮忙~
谢谢~
3996906 2006-07-06
  • 打赏
  • 举报
回复
发送流的那个好象有点问题。。偶以前试过一回,有点难用
constantine 2006-07-06
  • 打赏
  • 举报
回复
写了回复没发就ie死掉,晕
这次不说太多
2个一个发送字符串,一个发送流,不要用后面发送流的去直接发送字符串
dinggosumsung 2006-07-06
  • 打赏
  • 举报
回复
问题解决了
用tidudpserver的send方法正常发送了数据,可是tidudpserver的sendbuffer却始终没有发送成功,还请牛人解答一下,谢谢!期待回复中。
dinggosumsung 2006-07-06
  • 打赏
  • 举报
回复
先谢谢两位~

to:constantine(飘遥的安吉儿)

默认端口的属性是指TIdUdpServer中的defaultPort吧,这个一开始理解错了意思,所以以为没有地方设定本地端口

另解决了一些问题,但是还有一些问题,如下:
同时使用了client 和 server两个组件,在server的OnUdpRead事件中接收数据并自动向发送数据端回复信息,代码如下:

TStringStream *DataStringStream = new TStringStream("");
String s;
try
{
DataStringStream->CopyFrom(AData, AData->Size);
UDPMemo->Lines->Add("Received " + DataStringStream->DataString + " from " + ABinding->PeerIP + " on port " + IntToStr(ABinding->PeerPort));
s = "Replied from " + UDPServer->LocalName + " to " + DataStringStream->DataString;
ABinding->SendTo(ABinding->PeerIP, 8000, s.c_str(), s.Length());

}
__finally
{
DataStringStream->Free();
}
这样回复信息可以

然后我尝试如下代码:
TIdSocketHandle *ABinding = new TIdSocketHandle;
ABinding->PeerIP = "192.168.3.91";
ABinding->PeerPort = 8000;
String s = "test";

ABinding->SendTo("192.168.3.91", 8000, s.c_str(), s.Length());

编译就会出错,在实例化一个TIdSocketHandle变量时出错。
不在OnUdpRead事件中,应该如何使用TIdUdpServer发送数据?

请老大们伸出援手,谢谢了!

3996906 2006-07-06
  • 打赏
  • 举报
回复
和安安一起给自己的答案

这样的回贴方式,想起偶冲星的那时了。。。。
constantine 2006-07-06
  • 打赏
  • 举报
回复
1.没有代码不知道
2.有个默认端口的属性吧,你没有看到吗,server发送给client一般是在发送的函数里面指定ip,port的,我自己一般只用server控件,不用client控件

3.indy的控件是阻塞的,nm系列的一般都是非阻塞
这个属性可以控制等待时间吧
3996906 2006-07-06
  • 打赏
  • 举报
回复
你问的这个偶没做过。。因为觉得自己控制包的大小。。每个包发个1k左右,我用tnmudp就用的很好了。。。

indy的这个偶觉得过于复杂,自己要写的话,有些属性我不清楚。。。又不能保证好用

确实协议上讲硬件设备会帮你拆。。。但是那只是可能,需要设备支持。。。

还有在网络路由中,会过很多个路由设备。。。。每个设备的处理方式都不一样。。尽量自己来拆包。。安全点。。也快速点。。。

偶昨天晚上开始出差。。所以没继续跟你上的帖子。。。8好意思啊。。。。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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