asp组件中关于socket的使用问题(怪怪怪)(100分)

  • 主题发起人 主题发起人 localboy
  • 开始时间 开始时间
L

localboy

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟用delphi做了个组件,里面用到了tclientsocket,另外在服务器端有个serversocket,
源码如下
function Torderclient.sendorder: Integer;
var dm:tdatamodule;
cs:tclientsocket;
begin
dm:=tdatamodule.Create (nil);
cs:=tclientsocket.Create (dm);
cs.Address:='12.104.72.221';
cs.Port :=9090;
cs.Active:=true ;
if cs.Socket.Connected then
result:=9999
else
result:=7777;
我在测试时发现,我通过ASP调用组件时,服务器端显示是连接成功的,
但是返回的结果却是7777,即cs.Socket.Connected为false,
请教各位大虾!不胜感激!
 
真奇怪,为什么tclientsocket不放在datamodule里?
 
对不起,恕小弟无知,不知怎么个放法?
我那样样不算是吗?
 
把tclientsocket的控件放在datamodule里面,不用在这里动态创建clientsocket
 
哥们儿!能不能把SERVER端的代码列出来,我也正在研究这方面的问题!
 
tclientsocket放在datamodule里面反倒系统半天都不响应了!
见源文件如下
type
........
上略
tdatamodule1=class(tdatamodule)
cs:tclientsocket;
private
{ Private declarations }
public
{ Public declarations }
end;
var dm:tdatamodule1;
procedure torderclient.initialize;
begin
dm:=tdatamodule1.Create (nil);
inherited initialize;
end;
destructor torderclient.destroy ;
begin
dm.Free ;
inherited destroy;
end;
.......
with dm do
begin
cs.Address :='12.104.72.221';
cs.Port:=9090;
cs.Active :=true;
if cs.Socket.Connected then
result:=999
else
result:=888;

end;

兄弟们,再不帮忙,咱就完了!急!!!!!
 
兄弟,我这还没搞定呢!服务器端我也没整明白,一步步来吧!你注意看我发的贴子就好,
大家一起问,没准回话的高手会多些的!
兄弟我快急死了,整了好久了,一直不得门而入!
 
能不能把connect放后点,意思是等过一些时间在连接,如系统初始化后两秒等等.
 
放后一点我还没试,但不明白的是,怎么用了在UNIT里对DATAMODULE初始化反倒没了反应?
 
我想应该是TClientSocket没有受到系统发送的与WinSock有关的消息赵成的。用ctBlocking
因该没问题。或者加入消息循环

while [not error occur] and (not cs.Socket.Connected) then
Application.ProcessMessage;

if cs.Socket.Connected then
result:=9999
else
result:=7777;

[not error occur]可以为onerror事件得到出错通知后改变的开关变量
 
将connect放后我也试过了,看来还是不行,应该与时间长短无关!
 
不管 ClientSocket.ClientType 是什么,连接都是异步的。
就是说执行cs.Active:=true后cs.Active并不是马上为true,
不等待连接成功就立即返回,执行下行。
所以应该写 ClientSocket 的事件 OnConnect,表示连接成功
 
你如果是用ASP脚本连接的当然是返回FALSE了,因为你用WEB连接到WEBSERVER后,SERVER端处理了数据就自动和CLIENT端断开了,不然WEBSERVER哪能连那么多的CLIENT端啊!
 
这个问题我也想到了,但是为什么连接中断了服务器端没响应?
另外,应该如何才能解决这个问题呢?
 
动态创建了DATAMODULE之后,在ASP中进行调用,但是迟迟没有响应,源程如上!
 
经过检查,看来问题出在初始化上
dm:=tdatamodule1.Create (nil);

把这句删掉,就没有这个问题了!
 
Pipi.
是你错了吧,ctBlocking的话,如果成功,Active必为True.
 
前卫兄果然前卫,问题早解决了,忘了给各位加分,现来补上!
 
多人接受答案了。
 
后退
顶部