全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1528
推到 Plurk!
推到 Facebook!

請問有辦法透過socket讓原端的程式關閉ㄇ??

答題得分者是:Jasonwong
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-24 17:37:24 IP:61.221.xxx.xxx 未訂閱
如題
------
ivankuo
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-24 18:02:43 IP:211.23.xxx.xxx 未訂閱
嗯嗯~~如果你指的原端是指SERVER端的話~~ 你必須在SERVER端有一個SERVER程式~~而你在CLIENT可以在用SOCKET方式~~傳一個要關閉程式的名稱~~ 當SERVER接收到時~~再下~~KillProgram(LPCSTR ExeName)這個API就可以了~~ 希望我沒有搞錯你的問題~~ -- 聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-24 18:06:53 IP:61.221.xxx.xxx 未訂閱
不好意思~~~我打錯字,又沒交代清楚 是遠端但是指的是client端喔~~~ 可是ServerSocket只有監聽的功能,不能主動向client端發出訊息,有方法做ㄇ??
------
ivankuo
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-24 18:26:50 IP:211.23.xxx.xxx 未訂閱
引言: 不好意思~~~我打錯字,又沒交代清楚 是遠端但是指的是client端喔~~~ 可是ServerSocket只有監聽的功能,不能主動向client端發出訊息,有方法做ㄇ??
可以吧~~ServerSocket怎麼會沒有發出訊息的能力呢~~在DELPHI裡有附範例~~就是用ServerSocket元件寫成的~~你可以去參考一下~~ -- 聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-24 18:46:13 IP:61.221.xxx.xxx 未訂閱
前輩~~~難道是我搞錯了ㄇ?? 我是用Delphi 5 的在demo的資料夾沒找到範例耶~~~ ServerSocket不是都要等ClientSocket傳遞訊息後,ServerSocket接收到訊息後再回傳給ClientSocketㄇ?? 如果只知道ClientSocket的IPAddress和Port就可以傳訊息給ClientSocketㄇ??
------
ivankuo
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-24 19:03:09 IP:61.30.xxx.xxx 未訂閱
你好: Socket 程式不管 Server 或 Client 都可以主動 Send,差別在收到的資料是不是程式所要的,資料該如何解析。所以你可以在需要的時候由 Server 送出你設定屬於關機命令的資料,讓 Client 端接收自行關閉。如下圖所示,當 Client 傳送的認證資訊不符時,Server 下達 Close 命令,當 Client 接收後,自行關閉。這是我所了解的方式,希望能對你有幫助。
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-24 21:04:58 IP:61.70.xxx.xxx 未訂閱
引言: 前輩~~~難道是我搞錯了ㄇ?? 我是用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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-25 09:36:31 IP:61.221.xxx.xxx 未訂閱
那是在ServerSocket1ClientWrite的Event去寫ㄇ?? 假設我的Client已經好100人登入了,但是我要強制將其中一個Client踢除,這段是直接由Server向Client發出訊息(某段字串),我要如何去寫??小弟愚笨想了好久還是寫不出來,可以給個範例參考一下嗎??感激不盡.
------
ivankuo
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-25 10:59:56 IP:61.30.xxx.xxx 未訂閱
你好: 因為我都使用 Indy 對於你問的元件並不熟,所以我這個 Demo 並不是很好,希望能給你一些幫助 < href="http://k_top.delphi.com.tw/dl/testSocket.exe">http://k_top.delphi.com.tw/dl/testSocket.exe
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-06-25 11:06:10 IP:61.221.xxx.xxx 未訂閱
小弟在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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-06-25 11:59:55 IP:61.221.xxx.xxx 未訂閱
小弟發現如果加上showmessage之後,當client接收到被踢除的時候,執行showmessage會讓程式無法操作,但若有其他程式做縮小的動作的時候,showmessage才回再出現,程式才能繼續執行. 好怪~~~ 補充一下~~我是用terminal模式登入的,切換server和client兩台機器的時候會有這樣的情況發生. 發表人 - ivankuo 於 2003/06/25 12:22:39 發表人 - ivankuo 於 2003/06/25 12:33:40
------
ivankuo
系統時間:2024-05-03 19:44:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!