如何让clientsocket搜索所有在listen的serversocket?(50分)

  • 主题发起人 主题发起人 Schiesser
  • 开始时间 开始时间
S

Schiesser

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟初试Socket编程, 现有一问题:

1. 类似于AOE联机对战那样, 加入游戏方可以得到创建游戏方清单的功能
能否简单地通过serversocket/clientsocket实现?

2. 如果可以, 能否让ClientSocket端自动扫描IP, 如从192.168.0.1到
192.168.0.255,得到所有正在listen的SeverSocket清单?
 
应该可以把, 只要知道对方监听的端口,然后你用clientsocket去connect他,
如果连接上,就说明对方在监听,否则没有.

还是听听高手的吧...
 
可以的,指定ClientSocket.Port 和ClientSocket.Address,再ClientSocket.Active:=True,如果连上就知道有没有Server在Listen,
你可用For循环来处理
 
age在ipx协议下才会列清单,他是用广播协议的,在局域网里ip协议也可以,但在
internet上就不可以了。不过广播方式比较烦,你还是一个一个地址扫描吧,
提醒一下,用这种循环效率太低,而且clientsocket不是线程的,会让程序停在
那儿,最好是做在线程里。或改用线程方式工作的socket控件。并且你可以一次
多发几个链接。98最多96个,nt最多5000个。
 
那么如何得到ClientSocket连接失败的消息呢?
 
如果局域网中没有此IP又有什么消息?
 
如何设定连接超时时间呢?
 
设超时简单,因为ClientSocket没有设定超的属性,所以可以自已加一个TTimer
设定一个定时时间到时将网络断开就可以了。
 
如何断? 设ClientSocket.Active := False 吗?
 
用TCP/IP就没有简单的解决方法了吗?
 
ClientSocket虽然没有超时属性,但超时的时候会发出Exception
用Application接受Exception就可以了
同意Energy的意见,我见过一个程序叫Proxy Hunter就是这么做的
 
用UDP广播,一次找到所有机器。再用Socket处理以后的事情。
 
用广播极其容易!!
 
Schiesser:你所在网络的广播地址:192.168.255.255 用UDP
 
UDP没用过, 麻烦打侠解释先!
 
UDP是非连接协议,(TCP是连接协议)
用的时候和Socket一样,定义IP和Port
UDP可以在局域网中广播数据,前提是ip是广播地址(192.168.255.255)
此时,在该局域网上相同port的机器都能同时收到信息。
然后的事就是你想干什么就干什么了,目的已经达到。
 
此时你已经可以取得所有机器的IP了(收到广播信息的机器再根据发送方
的ip回信息),然后用socket针对性的连接。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部