線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3556
推到 Plurk!
推到 Facebook!

三層結構急需解決的有關用戶連線和連線IP的問題?

答題得分者是:wameng
samng
一般會員


發表:11
回覆:11
積分:4
註冊:2004-06-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-22 13:48:55 IP:219.130.xxx.xxx 未訂閱
Delphi7用三層做數據庫專案.AppServer使用MIDAS dbexprss,DCOM,在Server端AppServer如何獲得用戶的連線數量和連線到AppServer的客戶端的IP位址.請各位指教. 我想在应用程序服务器端做一些监控,比如显示客户端机器的IP,机器名字, 端口号,模块名称(此应用程序服务器有几个远程数据模块,不同的客户端模块连不同的数据模块),用户名称(登录客户端的用户名称),连接时间。如果可能的话,服务器端可以断开任一客户端的连接。 请各位高手给我一个完整的答复!谢谢了。。。 如果有範例程式.就更好了.
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-22 15:14:48 IP:61.222.xxx.xxx 未訂閱
事實上,當每個 Remotemodule.OnCreate 時 就可以累加"用戶的連線數量" >我想在应用程序服务器端做一些监控,比如显示客户端机器的IP,机器名字, 可以在 APPSERVER COM 當中定義 Method >如果可能的话,服务器端可以断开任一客户端的连接。 可以用PostThreadMessage 方式,將其斷開連接。 不過 DataModule 有沒有被正確的釋放內存 這我就不曉得了!
samng
一般會員


發表:11
回覆:11
積分:4
註冊:2004-06-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-22 23:40:47 IP:221.4.xxx.xxx 未訂閱
可以說清楚點嗎?最好舉個例.有程式作參考更好.
samng
一般會員


發表:11
回覆:11
積分:4
註冊:2004-06-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-22 23:42:10 IP:221.4.xxx.xxx 未訂閱
各位高手,幫幫忙吧!
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-22 23:51:44 IP:61.222.xxx.xxx 未訂閱
事實上,應該不難啊!只是有點繁瑣而已。 我們可以建立一全局變數 例如: ClientCount 在 DataModule.OnCreate 時,加一 ONDestory 減一。 您應該是一個客戶端對應一個Thread 及Instance 吧。 {我記得好像有各 ComSvr 太久了忘記實際的名稱。好像有個 ThreadCount 或 ComCount的屬性。您可以查一查} 建立Com的事件。 在Client中以 APPSERVER.SendInfo{自訂事件}(.....) 將用戶端的訊息,傳送給 APPSERVER 可以參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58044 發表人 - wameng 於 2004/10/22 23:54:50
samng
一般會員


發表:11
回覆:11
積分:4
註冊:2004-06-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-23 16:31:20 IP:221.4.xxx.xxx 未訂閱
我是初學者.有些還不是太了解.所以請教各位大佬.wameng大佬謝謝你.但是你還不以完全幫我解決問題.如果各位大佬覺得小弟太菜,那就請各位大佬推荐一些與此相關的書籍給小弟,或是參考哪些源碼.好指點小弟的迷津.
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-23 21:55:35 IP:61.70.xxx.xxx 未訂閱
引言: 我是初學者.有些還不是太了解.所以請教各位大佬.wameng大佬謝謝你.但是你還不以完全幫我解決問題.如果各位大佬覺得小弟太菜,那就請各位大佬推荐一些與此相關的書籍給小弟,或是參考哪些源碼.好指點小弟的迷津.
【問題】如何做到使client無法登入server主機? http://delphi.ktop.com.tw/topic.php?topic_id=49212 有點類似, 參考看看.
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
samng
一般會員


發表:11
回覆:11
積分:4
註冊:2004-06-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-10-24 11:30:27 IP:221.4.xxx.xxx 未訂閱
引言:
引言: 我是初學者.有些還不是太了解.所以請教各位大佬.wameng大佬謝謝你.但是你還不以完全幫我解決問題.如果各位大佬覺得小弟太菜,那就請各位大佬推荐一些與此相關的書籍給小弟,或是參考哪些源碼.好指點小弟的迷津.
【問題】如何做到使client無法登入server主機? http://delphi.ktop.com.tw/topic.php?topic_id=49212 有點類似, 參考看看.
我有看過.好像并沒有太大的幫助.我的問題是獲取用戶連線數量和連線的IP地址.機器名稱.以及可以在應用層斷開客戶端的連接.而文章的問題是限定Client在特定的時間內無法登入Server.還望大大再幫忙看看.謝了. 發表人 - jieshu 於 2004/10/24 11:38:27
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-10-24 11:48:44 IP:61.70.xxx.xxx 未訂閱
引言: 我有看過.好像并沒有太大的幫助.我的問題是獲取用戶連線數量和連線的IP地址.機器名稱.以及可以在應用層斷開客戶端的連接.而文章的問題是限定Client在特定的時間內無法登入Server.還望大大再幫忙看看.謝了.
就是利用DataRequest Function, 在Client連線時呼叫, 讓連線數量加1, 關閉程式時再呼叫, 讓連線數量減1, IP和電腦名稱也是在Client取得後傳給Server, 你可能要自己多用點功, 搜尋一下相關文章, 沒有人會幫您將所有程式碼寫好給您. <iFrame src="http://www.coss.com.tw/jieshu/sign.htm" width=400 height=105 scolling="NO" border="0"></iFrame> 震江系統(股)公司: http://www.coss.com.tw/ 捷舒軟體設計坊: http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
samng
一般會員


發表:11
回覆:11
積分:4
註冊:2004-06-29

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-10-24 17:16:58 IP:221.4.xxx.xxx 未訂閱
就是利用DataRequest Function, 在Client連線時呼叫, 讓連線數量加1, 關閉程式時再呼叫, 讓連線數量減1, IP和電腦名稱也是在Client取得後傳給Server, 你可能要自己多用點功, 搜尋一下相關文章, 沒有人會幫您將所有程式碼寫好給您. 謝謝大大的提點.我就是想大大們提供相關的文章給小弟作參考.并不想大大們幫小弟寫好程式碼.
mirage
初階會員


發表:40
回覆:101
積分:28
註冊:2004-01-05

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-11-03 08:52:52 IP:218.162.xxx.xxx 未訂閱
其實要取得client的連接ip才是困擾: 為多網卡的多ip問題(內外部dhcp ip.內部保留ip.固定ip等), 如何正確取得連接server的ip, 真的很困擾的.
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-11-03 10:29:50 IP:203.204.xxx.xxx 未訂閱
引言: 其實要取得client的連接ip才是困擾: 為多網卡的多ip問題(內外部dhcp ip.內部保留ip.固定ip等), 如何正確取得連接server的ip, 真的很困擾的.
嗯, 單一網卡抓IP確實簡單, 站內應該就找的到Function, 多網卡的話就比較麻煩, 但一般的電腦應該都是單網卡較多吧! 多網卡連接Server的IP, 可用Indy的IdTCPClient和IdTCPServer實際連線, 然後用IdTCPServer的Execute事件, 用AThread.Connection.Socket.Binding.PeerIP取得, 我只會這種笨方法. < src="http://www.coss.com.tw/jieshu/sign.htm" scolling="NO" border="0"></iFrame> 震江系統(股)公司: http://www.coss.com.tw/ 捷舒軟體設計坊: http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
mirage
初階會員


發表:40
回覆:101
積分:28
註冊:2004-01-05

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-11-04 16:57:31 IP:218.162.xxx.xxx 未訂閱
引言: 多網卡連接Server的IP, 可用Indy的IdTCPClient和IdTCPServer實際連線, 然後用IdTCPServer的Execute事件, 用AThread.Connection.Socket.Binding.PeerIP取得, 我只會這種笨方法. < face="Verdana, Arial, Helvetica"> 版主大大: 我是用IdIPWatch1.LocalIP取得client的ip, 在2000上都能正確取得連server的ip, 但在xp時,如網卡有設內部ip時,就抓到內部ip, 因我的架構是c/s,所以無法用大大的方法測試, 如我所言,client的ip有非常多的情況,
引言: 其實要取得client的連接ip才是困擾: 為多網卡的多ip問題(內外部dhcp ip.內部保留ip.固定ip等), 如何正確取得連接server的ip
不知大大有何解決方法? 謝謝!
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-11-04 18:20:21 IP:203.204.xxx.xxx 未訂閱
引言: 我是用IdIPWatch1.LocalIP取得client的ip, 在2000上都能正確取得連server的ip, 但在xp時,如網卡有設內部ip時,就抓到內部ip, 因我的架構是c/s,所以無法用大大的方法測試, 如我所言,client的ip有非常多的情況, 不知大大有何解決方法? 謝謝!
我只知道這個方法, c/s也可以單獨寫一支有IdTCPServer的程式放到DBServer上去常駐執行, 讓連線的Client取得連線IP, 也就是在Execute事件將PeerIP回傳. <iFrame src="http://www.coss.com.tw/jieshu/sign.htm" width=400 height=105 scolling="NO" border="0"></iFrame> 震江系統(股)公司: http://www.coss.com.tw/ 捷舒軟體設計坊: http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
JustinShen
中階會員


發表:22
回覆:104
積分:80
註冊:2003-09-20

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-12-17 20:40:28 IP:61.155.xxx.xxx 未訂閱
My suggestion: If client use dcomconnection, app server program use windows api to get client ip If client use socketconnection, you must rewrite scktsrv.exe, you can found source in source/vcl. Justin Shen
------
====================
我为一切作努力!
Justin Shen

dandy
一般會員


發表:2
回覆:1
積分:0
註冊:2003-11-23

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-08-05 00:23:50 IP:220.130.xxx.xxx 未訂閱
我是這樣做的,請參考: 1.在client端傳遞5個string給SocketConnection1.AppServer.Login,除了驗證外,順便把電腦名稱,ip,使用系統,使用時間都傳過去    LoginDMForm.SocketConnection1.AppServer.Login(UserName,Password,   ComputerName,ComputerIP,GetSys,GetTime);    電腦名稱,ip,使用系統,使用時間取得如下: //-------取得電腦名稱------------------------------------------- function ComputerName : String ; var LocalMachine: PChar; Len: DWord; begin Len := MAX_COMPUTERNAME_LENGTH + 1; // 取得本機電腦名稱 GetMem(LocalMachine,Len); if GetComputerName(LocalMachine,Len) then Result := LocalMachine else Result := 'UnKnow'; FreeMem(LocalMachine,Len); end;    //-------取得電腦IP Address---------------------------------------- function ComputerIP:String; var phe:pHostEnt;     w:TWSAData;     ip_address:longint;     p:^longint;     ipstr:string; begin  if WSAStartup(2,w)<>0 then exit;  phe:=gethostbyname(pchar(ComputerName));  if phe<>nil then   begin    p:=pointer(phe^.h_addr_list^);    ip_address:=p^;    ip_address:=ntohl(ip_address);    ipstr:=IntToStr(ip_address shr 24)+'.'+IntToStr((ip_address shr 16) and $ff)     +'.'+IntToStr((ip_address shr 8) and $ff)+'.'+IntToStr(ip_address and $ff);    Result :=ipstr;   end; end;    //-------取得電腦時間------------------------------------------- function GetTime: String; begin   Result:=TimeToStr(Time); end;    2.如圖,建立一個Login的method,然後給5個paramaters,以接收client端傳來的string; 3.將這些string加入Listbox裡,並將登入旗標設成True procedure TLoginRDMForm.Login(const UserName, Password, CompName, CompIP, UseSystem, LoginTime: WideString); var xSQL:string; begin if Query1.Active then Query1.Close; Query1.SQL.Clear; xSQL:='SELECT * FROM PERMIT WHERE USER_ID='''; xSQL:=xSQL+UserName+''''; Query1.SQL.Add(xSQL); Query1.Open; // if not ((Query1.Locate('USER_ID',UserName,[])) or (UserName='ADMIN')) then if (Query1.Locate('USER_ID',UserName,[])) and (CompareStr(Password,Query1.FieldByName('USER_PASS').Value)=0) then begin GoodApForm.ListBox1.Items.Add(UserName); with GoodApForm.ListView1.Items.Add do begin Caption:=UserName; SubItems.Add(CompName); SubItems.Add(CompIP); SubItems.Add(UseSystem); SubItems.Add(LoginTime); end; FLoggedIn := True; FUserName := UserName; end; end;
系統時間:2024-04-19 11:35:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!