关于INDY控件中的IDTCPSERVER的问题、

fangjx 2003-08-19 07:24:04
1、假如将IDTCPSERVER的DEFAULTPORT(初始端口)设置为0的时候,那IDTCPSERVER将自动开设系统没有被占用的端口,请问如何获取IDTCPSERVER当前端口号呢?
2、如何列举当前系统所有正在使用的端口?
3、当IDTCPCLIENT连接到IDTCPSERVER的时候,IDTCPSERVER就创建一个线程,请问当有10个IDTCPCLIENT的时候,如何判断IDTCPSERVER当前的线程数量、以及线程各对应哪个IDTCPCLIENT;
最主要的是::::
《--如何由IDTCPSERVER的一个线程主动发送一个请求到相对应的IDTCPCLIENT--》
...全文
182 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
udbw 2003-12-03
  • 打赏
  • 举报
回复
学习INg
猛禽 2003-11-17
  • 打赏
  • 举报
回复
TO:ZZZippo(音乐蓝鸟)
那样还要多一个UDP通道,不见得更简单
cx_super 2003-11-16
  • 打赏
  • 举报
回复
好东西啊,我找了一个世纪才找到。我一直都解决不了第3个问题
ly_liuyang 2003-11-14
  • 打赏
  • 举报
回复
Indy都支持的,看看Help就清楚了,都没认真研究过就说解决不了
Indy的Demo有很多例子的,还可以参看Indy的VCL代码就更清楚了

LYFTP基于IndyFTP,不一样很强大吗?

http://lysoft.7u7.net
猛禽 2003-11-14
  • 打赏
  • 举报
回复
这么老的贴子都被翻出来了。

TO:ZZZippo(音乐蓝鸟)
服务端知道自己BIND哪个PORT又没用,客户端不知道,还是得一个个试过去

TO:ly_liuyang(Liu Yang)
来做广告的吧:)有没有看完我们的所有讨论内容呢?
ZZZippo 2003-11-14
  • 打赏
  • 举报
回复
我也开发过一个通讯的程序,是用TCP传输文件,我是在开了TcpServer后用UDP把TcpServer的Port和文件名等信息传给Client端,然后就等着传吧:)
ZZZippo 2003-11-13
  • 打赏
  • 举报
回复
本来就有啊
idTcpServer.Band[0].Port
fangjx 2003-08-23
  • 打赏
  • 举报
回复
好,测试通过后给你分!!
猛禽 2003-08-22
  • 打赏
  • 举报
回复
代码就没空写了,思路大致是这样:

首先创建一个全局队列 GlobalList : TList;
每个EXECUTE开始,创建一个队列 LocalList : TStringList;
然后把LocalList和AThread做成一个记录加入到GlobalList中
然后这样:
if LocalList.Count = 0 then AThread.Suspend; // 因为此时在线程中,执行此句后就停在这里了
s := GetFirstListItem( ); // 从LocalList里取出第一行,并将它从LocalList里删除
AThread.Connection.WriteString( s );
死循环回上面的if处

注意:上面未定义退出条件,你可以定义一个特定的消息或由客户端进行断开操作

要发消息时,只遍历一下GlobalList,往每个LocalList里加入String,并将相就的AThread.Resume一下即可。

注意:操作LocalList时需要加入CriticalSection,以防线程访问冲突。
fangjx 2003-08-22
  • 打赏
  • 举报
回复
1、虽然获取DEFAULTPORT的方法还是不知道,但问题应该可以解决了,
2、挨个连接,虽然可以用,但是不是有点........^_^
3、假如一个客户已经连接到服务器端。现在要求当点击服务器上的一个BUTTON的时候,服务器主动向客户端发送一个指令(例如:Athread.connection.writestring('接收');)。
Raptor(猛禽) 能给出代码让我学习一下吗??
猛禽 2003-08-21
  • 打赏
  • 举报
回复
1、不建议这么做
2、逐个PORT连接试试
3、Threads属性就是
最主要的是::::
你的用法错误,正确的做法是响应ONEXECUTE事件,在这个事件里处理事情,就不会有这么多问题了。
fangjx 2003-08-21
  • 打赏
  • 举报
回复
难道没有人知道 ?????????????高手哪去了,我可是倾家荡产送分啊!
猛禽 2003-08-21
  • 打赏
  • 举报
回复
1、你可以学习QQ,当此端口被占用时,尝试下一个
2、用上面的方法,这就没必要了吧
3、一样可以实现:在EXECUTE里循环读取一个QUEUE,如果为空则把THREAD SUSPEND,服务端要发消息时只要向QUEUE里加数据即可,在QUEUE加数据的同时把THREAD RESUME即可实现你要的功能。
fangjx 2003-08-21
  • 打赏
  • 举报
回复
1、我这样做自然有这样做的需要,因为我不想固定一个端口,因为万一这个端口被占用,我的程序就会出错。 最后还请告诉我IDTCPSERVER的DEFAULTPORT(初始端口)设置为0的时候,那IDTCPSERVER将自动开设系统没有被占用的端口,请问如何获取IDTCPSERVER当前端口号呢?
2、...那我就一个一个试吧。
3、我的思路是这样的:
服务器端处于公网,客户端处于内网中(通过局域网共享上网),那这样只有客户端才可以发出请求与服务器连接,服务器没有办法主动给客户端发送请求(用TCP/IP)。对吧?问题是我想在客户端与服务器连接后,由服务器不定时、主动给这个客户端发送指令,你说我应该怎么做?
最后,我已经满天星星了。^_^
猛禽 2003-08-21
  • 打赏
  • 举报
回复
1、因为服务端都不知道自己的端口号,客户端更不知道,怎么连接?这么做有什么意义?
2、除了一个个PORT去BIND以外,我不知道还有什么办法,也许OS知道
3、当CLIENT连到SERVER时,就进入ONEXECUTE,退出ONEXECUTE就断开,所有与客户端的交互都是在ONEXECUTE里,每个客户端有独立的线程EXECUTE,服务端只要在ONEXECUTE里发给客户端就好了,不要在ONEXECUTE之外向客户端发送东东,因为在不同的线程间不能保证不出问题。如果必须这么做,想想你的设计是不是有问题。

最后,请继续晕。
fangjx 2003-08-21
  • 打赏
  • 举报
回复
1、!◎#¥%。晕。
2、再晕!!
3、我知道客户端连接服务器端要响应ONEXCUTE事件,如果客户是内网用户,客户有首先连接了服务器。那这时服务期如何向客户发送数据?
fangjx 2003-08-20
  • 打赏
  • 举报
回复
没有人回应?加分也行啊!!!
fengfan 2003-08-20
  • 打赏
  • 举报
回复
回复关注,这样可以继续看了。
fangjx 2003-08-20
  • 打赏
  • 举报
回复
我顶顶~~~~~~~~~~~~~
微雪缤纷 2003-08-20
  • 打赏
  • 举报
回复
关注,,如果你解决了记得tell me.
加载更多回复(1)

1,593

社区成员

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

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