是不时有个时间差的问题? (50分)

  • 主题发起人 主题发起人 carem1
  • 开始时间 开始时间
C

carem1

Unregistered / Unconfirmed
GUEST, unregistred user!
最终的原因已经找到了,所以我编辑了一下贴子~!!

procedure Tform1.N12Click(Sender: TObject); //锁定
begin
if clientsocket1.Active then clientsocket1.Active:=false;
ClientSocket1.Address :=selectip;
Clientsocket1.Active :=true;
ClientSocket1.open;
showmessage('已连接服务端');
ClientSocket1.Socket.SendText('lockuser');
end;

为什么总要showmessage server才可以收到sendtext里面的命令??
我察看过资料。是因为阻塞方式的问题。请问如何解决?放在connect里面不行~!!!

 
你的客户端发的是'reboot'
ClientSocket1.Socket.SendText('reboot');

你的服务端好像没处理:
if S = 'lockoff' then {客户端发出注销指令}
begin
ExitWindowsEx(EWX_FORCE OR EWX_LOGOFF,0);
end else if s = 'reboot' then // 可能你是不是要加这个判断?
reboot;
end;
 
个人认为:
连接是要一些时间的。
如果没有连接上,执行ClientSocket1.Socket.SendText('lockuser')是无效的。
而你加上showmessage('已连接服务端')时,你要按ok按钮确定,才执行
ClientSocket1.Socket.SendText('lockuser'),
在你按ok之前,连接的代码已经提交并执行了。
ClientSocket1.Address :=selectip;
Clientsocket1.Active :=true;
ClientSocket1.open;
经过你按ok这段时间,控件已经连接上了,所以
ClientSocket1.Socket.SendText('lockuser')执行有效。
所以应确保连接上了才进行发送。其实很简单,你只要把连接的代码与发送的代码分开即可。
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Host:=selectip;
ClientSocket1.Port:=4444;
ClientSocket1.Active :=true;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ClientSocket1.Socket.SendText('reboot');
end;
 
用TCP连接需要有建立过程,如果用在广域网上延时可能更长
 
谢谢各位。虽然还是有些小问题。但是总算解决了~!!看来下次我改用tcpclient好一点~!!
 
多人接受答案了。
 
后退
顶部