请教socket问题(100分)

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

liugg

Unregistered / Unconfirmed
GUEST, unregistred user!
我用正在制作一个远程控制程序,远程端使用NMUDP控件和CLIENTSOCKET控件,控制端
使用NMUDP控件和SERVERSOCKET控件,我通过NMUDP控件来传递激活和关闭CLIENTSOCKET控件
的命令。然而我传递过去的指令总是执行错误,不知道是什么原因。
我通过执行指令:clientsocket1.close或clientsocket1.active:=false,都曾经试验过。
我根本关不掉CLIENTSOCKET1!
请大家指教!
 
请用INDY的
UDP相关控件试一下。
 
用CLIENTSOCKET和SERVERSOCKET就可以,不用其它的控件的!
 
我觉得跟UDP控件应该没有关系!
因为我只是用UDP来接受相关命令,
然后打开或关闭clientsocket1,我可以实现打开却不能关闭!
 
to writer:
是的!
但现在是:
客户端我用serversocket,
服务器端用clientsocket,
好像不行!
 
不知你的“clientsocket1.close或clientsocket1.active:=false”加在了什么地方?
 
brokensun:
我把它加在UDP接受到断开连接的命令后。代码如下:
if CtrlCode[0]+CtrlCode[1]+CtrlCode[2]+CtrlCode[3]+CtrlCode[4]+CtrlCode[5]+CtrlCode[6]+CtrlCode[7]='noscreen' then
begin
if clientsocket1.Active then clientsocket1.Active :=false;
try
clientsocket1.open;
clientsocket1.Close;
showmessage('抓屏结束!');
except
showmessage('"抓屏结束"设置失败!');
end;
 
可以的,如果
>>客户端我用serversocket,
>>服务器端用clientsocket,
这样就成了可以逃过防火墙的连接了,我记得有木马是用这方式的,
服务器端用clientsocket定时向一个URL检查其是否有此网页存在,
如果有就读取它的内容(内容里有你客户端的IP和PORT,当然这个
网页要放在你可以控制的网站上,如免费主页空间),之后连接就和
服务端用ClientSocket客户端用Serversocket没有多大的分别了。
 
问题是为什么我远程close不掉clientsocket1?
 
你是指“if clientsocket1.Active then clientsocket1.Active :=false;”执行无效,还是
执行出错?
 
是执行出错!
 
不好意思,我做了Test试不出,一关就关掉了,也许是场合不同,出错比无效好办,你在clientsocket1的
Onerror中加入代码,看看是什么错?此时,有可能正在数据传输么?
 
>>问题是为什么我远程close不掉clientsocket1?
clientsocket1可以关掉?它根本就没有临听呀,只有serversocket才能监听,所以才所以
关闭。你明不明白?
 
brokensun说的有道理:
有可能是正在数据传输的原因!
再者,传递流的时候,好像内存流不能用显式的方式释放,即在程序任何地方不能出现
如下代码:
stream.clear;或
stream.free;
你可以试试!
 
谢谢!
原来是内存流的问题!
 
后退
顶部