請問有辦法透過socket讓原端的程式關閉ㄇ?? |
答題得分者是:Jasonwong
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
Jasonwong
版主 發表:49 回覆:931 積分:581 註冊:2006-10-27 發送簡訊給我 |
嗯嗯~~如果你指的原端是指SERVER端的話~~ 你必須在SERVER端有一個SERVER程式~~而你在CLIENT可以在用SOCKET方式~~傳一個要關閉程式的名稱~~ 當SERVER接收到時~~再下~~KillProgram(LPCSTR ExeName)這個API就可以了~~ 希望我沒有搞錯你的問題~~ --
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心 |
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
Jasonwong
版主 發表:49 回覆:931 積分:581 註冊:2006-10-27 發送簡訊給我 |
引言: 不好意思~~~我打錯字,又沒交代清楚 是遠端但是指的是client端喔~~~ 可是ServerSocket只有監聽的功能,不能主動向client端發出訊息,有方法做ㄇ??可以吧~~ServerSocket怎麼會沒有發出訊息的能力呢~~在DELPHI裡有附範例~~就是用ServerSocket元件寫成的~~你可以去參考一下~~ -- 聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心 |
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
Jasonwong
版主 發表:49 回覆:931 積分:581 註冊:2006-10-27 發送簡訊給我 |
引言: 前輩~~~難道是我搞錯了ㄇ?? 我是用Delphi 5 的在demo的資料夾沒找到範例耶~~~ ServerSocket不是都要等ClientSocket傳遞訊息後,ServerSocket接收到訊息後再回傳給ClientSocketㄇ?? 如果只知道ClientSocket的IPAddress和Port就可以傳訊息給ClientSocketㄇ??由於我用的是DELPHI7,這版的DELPHI已經將ServerSocket跟ClientSocket拿掉了,所以我無法找到範例給你,但你可以在C:\Program Files\Borland\Delphi7\Demos\Internet\NetChat這裡試試,看看有沒有一樣。 -- 聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心 |
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
小弟在Server端的一個button適用來強制踢除client程式的,
但是卻在Clietn卻沒有接收到訊息??我寫登入登出的地方都可以~~~就是這不行
ServerType,ClientType都為stNonBlocking ---------------Server procedure TFormManager.Button1Click(Sender: TObject);
var
ClientAddPort:string;
i:integer;
begin
try
//ConnectedState=0代表還在線上
if ADOQuery1.FieldByName('ConnectedState').value='0' then
begin
ClientAddPort:=ADOQuery1.FieldByName('ClientIPPort').value;
for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do
begin
//比對要踢除的user的IP和port
if ClientAddPort=ServerSocket1.Socket.Connections[i].RemoteAddress
'.' inttostr(ServerSocket1.Socket.Connections[i].RemotePort) then
begin
ServerSocket1.Socket.Connections[i].SendText('APClose');
break;
end;
end;
ADOQuery1.delete;
ADOQuery1.Refresh; end
else
showmessage('還在線上不能刪除'); except
showmessage('資料刪除失敗');
end; end; ---------------Client procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var s:string;
begin
s:='';
s:=trim(Socket.ReceiveText); if s='APClose' then
begin
showmessage('程式強制登出');
ClientSocket1.Close;
Application.Terminate; end else
if s='LoginRepeated' then
begin
showmessage('人員登入重複');
ClientSocket1.Close;
Application.Terminate;
end
else
begin
Label1.Caption:=s;
Application.ProcessMessages;
end; end; 發表人 - ivankuo 於 2003/06/25 11:10:43
------
ivankuo |
ivankuo
中階會員 發表:132 回覆:272 積分:95 註冊:2002-11-21 發送簡訊給我 |
小弟發現如果加上showmessage之後,當client接收到被踢除的時候,執行showmessage會讓程式無法操作,但若有其他程式做縮小的動作的時候,showmessage才回再出現,程式才能繼續執行.
好怪~~~ 補充一下~~我是用terminal模式登入的,切換server和client兩台機器的時候會有這樣的情況發生. 發表人 - ivankuo 於 2003/06/25 12:22:39 發表人 - ivankuo 於 2003/06/25 12:33:40
------
ivankuo |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |