关于delphi中ClickSocket若干问题......(100分)

  • 主题发起人 主题发起人 独孤天下
  • 开始时间 开始时间

独孤天下

Unregistered / Unconfirmed
GUEST, unregistred user!
最近小弟在编写有关tcp/ip协议的内容中遇到以下几个问题,
望各位大虾慷慨帮助啊,呵呵....

1.是不是只支持一次连接,无法在clientsocket中创建多线程?

2.在断开连接时(获取信息后),如何使之继续保持连接?

3.是不是只要使ClientSocket.active:=true;就可以连接上???

更进一步的问题,可能要等各位回答了才好提出,呵呵:)

谢谢!


 
另:
在delphi中,有没有其他办法(即不使用ClientSocket控件)实现"多线程"扫描端口?
 
1.是——ClientSocket控件只有一个Host(Address)属性
2.不明白——既然要断开,又如何“继续保持连接”。时不时想再次连到同一个主机上去?
3.是的。Open方法也可以。 (当然,最好在OnError事件里进行可能发生的错误处理)

用ClientSocket扫描端口倒是比较少见,用API吧。
 
1.ClientSocket的确只有一个Host(Address)属性,
而我的意图是对一台主机实现多线程连接,不知用ClientSocket可否实现?
还是说要动态产生多个ClientSocket才可以?
2.指的是:用ClientSocket.socket.sendtext向一台主机发命令后,
会自动断开连接,我曾用disconnect和onerror进行过处理,可惜无法继续连接。。。
不知用何种方法可以?(用vc++可以实现相同的功能)
3.和第2的问题类似。

如果用API,应参考哪个函数?谢谢!
 
1."要动态产生多个ClientSocket"——是的,如果要用ClientSocket,别无选择。
2.你所说的情况是不是指主机每次收到客户端的信息之后就会立即断开连接,所以客户端若要再次
发送信息,就必须重新连接到服务器?
我试过了,在Disconnect事件里的确不能调用Open方法,可能是因为此时Disconnect还没有完成
的原因吧。我用了一个Timer控件,在Disconnect事件里将其激活。OnTimer代码如下:
Button1.Click; //调用ClientSocket的Open方法
Timer1.Enabled:=false;
因为我不知道如何使程序在执行完某个过程之后立即执行另一个过程的方法,所以只能出此下策。

因为我还没有编写过类似的程序,所以具体如何做我也不清楚。不过你可以看一看LID=470229。
网上有很多关于Socket编程的电子书,你可以搜索一下。
 
我也在作类似的工具,如果你非要坚持使用ClientSocket(来自Delphi的集成控件),
那结果是“非常遗憾”。可行的替代方法是:
1。 建立一个多线程框架,例子在Demos里有
2。 每个线程取一个目标主机和端口信息,进行连接;
3。 等待并接收线程结束事件,将返回结果保存。
 
//thanks bfcat
我目前正在尝试用API函数来代替ClientSocket实现扫描,但遇到不少困难,
不知你是如何使用Connect()来实现的?怎么定义一些socket变量呢?
一些在VC里有,但delphi里却没有的,如SOCKADDR_IN等等...
愿闻其详!
 
独孤天下,我建议在调用API 之前先将DELPHI 在线帮助中所有关于SOCKET 编程的内容
扫描一遍,我想对你会有很大的帮助。
 
1. 在Delphi中获取有关地址信息是可以的。需erverSock控件中的方法;如果一定要使用
sockaddr_in, 则可以使用Indy网络控件(Free)。很好用。

2。 一般的机器抵挡10几个线程没问题,多了速度会下降;因此可以首先建立一个标志数组,
用来记录有关Socket的信息,线程的信息;下面建立一个主控线程来判断标志数组中的任务
状态,对于没有完成的则创建一个线程进行工作,
并把运行状态置位;子线程退出是对该标记复位,主控线程反复扫描标准数组。

3。 把线程的例子好好看看,至于网络知识有些就可以了。
 
不是说那个谁有oicq的源程序吗?

可能那里面这些个问题基本上解决了。
 
2.在断开连接时(获取信息后),如何使之继续保持连接?
在Disconnect中PostMessage(WM_REOPEN, 0,0)
看一下TCustomWinSocket.DeferFree;就知道了

 
WinSock.pas
TSockAddrIn = sockaddr_in;

 
刘李子 说得对!
 
//thanks all
一直以为用delphi进行网络编程不如VC来得方便,但这一周来受到大家的热情帮助,
使本人对此产生浓厚的兴趣。
想请教高手:在Linux系统下实现的半扫描技术,由于涉及到的include文件在Windows
系统中大多找不到,那么是否有可能通过delphi构造ip包来实现?
不知各位对半扫描了解多少?可有志同道合之士?
:)
 
to 独孤天下:
你想构造ip包?
这种东西和开发工具没什么关系的,
不管用Delphi还是VC,都没有多少现成的东西可以利用
既然你对VC这么精通,还是用VC吧;
同时你也可以拿Jakal扫描器的源代码看看(当然那是在Linux下用C写的)
 
多人接受答案了。
 
后退
顶部