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

求救!就要交不了差了,请大家帮个忙呀~~~谢谢~

尚未結案
jackalan168
一般會員


發表:6
回覆:12
積分:8
註冊:2004-01-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-04 16:16:15 IP:218.2.xxx.xxx 未訂閱
程式在客户断少的时候可以正常运行,但如果客户端很多,如:60台计算机请求连线,这是服务器程序基本上就挂掉了。。。请问我该怎么做???    AB大哥,我是用GB发言的,不知道你们那能看到吗?    使用ServerSocket/ClientSocket写一个网路程式,在Client连接后将CLIENT的相关信息显示在LISTVIEW中,以方便用户管理,并用一个结构存储用户信息: type    client_record=record    CHandle : Integer;            //客户端套接字句柄    CSocket : TCustomWinSocket;    //客户端套接字    CName   : String;                //客户端计算机名称    CAddress: String;             //客户端计算机IP地址    CUsed   : boolean;              //客户端联机标志 end;    客户端连接成功时: procedure TFrmMain.Server1ClientConnect(Sender: TObject;   Socket: TCustomWinSocket); var   i,j:integer;   Cname : String;   xItems : Tlistitem; begin   Cname := Socket.RemoteHost;   if trim(Cname) = '' then   begin     Cname := Socket.RemoteAddress;   end;   //MaxConnect 是一个常量,控制最大上线计算机数量   if netlist.Items.Count >= MaxConnect then   begin     ViewInfo('客户端 '+ Cname + ' 请求连接服务器,但服务器已经到连接上限,拒绝连接',6);     Socket.Close;     exit;   end;   j:=-1;   for i:=0 to sessions do   begin     //在原有的客户端连接数组中有中断的客户端连接     Application.ProcessMessages;     if not session[i].CUsed then     begin       session[i].CHandle := Socket.SocketHandle;//客户端套接字句柄       session[i].CSocket := Socket;                //客户端套接字       session[i].CName := Socket.RemoteHost;       session[i].CAddress := Socket.RemoteAddress;       session[i].CUsed := True;        //连接数组当前位置已经占用       inc(CountConnection);       Break;     end;     j:=i;   end;   if j=sessions then   begin     Application.ProcessMessages;     inc(sessions);     inc(CountConnection);     inc(j);     session[j].CHandle := Socket.SocketHandle;     session[j].CSocket := Socket;     session[j].CName := Socket.RemoteHost ;     session[j].CAddress := Socket.RemoteAddress ;     session[j].CUsed := True;   end;   if Not UserConOrDisCon.Enabled then UserConOrDisCon.Enabled := True; end;    UserConOrDisCon是个TIMER元件,用来处理上线计算机显示的, procedure TFrmMain.UserConOrDisConTimer(Sender: TObject); Var   i,j : Integer;   HaveList : Boolean;   xItem : TListitem;   Tmpstr,CName,CIp : String; begin try   if CountConnection<=0 then   begin     UserConOrDisCon.Enabled := false;     exit;   end;      UserConOrDisCon.Enabled := false;   for i:=0 to sessions do   begin     //在原有的客户端连接数组中有中断的客户端连接     Application.ProcessMessages;     if session[i].CUsed then     begin       HaveList := false;       CIp := session[i].CAddress;       for j := 0 to Netlist.Items.Count -1 do       begin         Application.ProcessMessages;         if netlist.Items[j].SubItems.Strings[0] = CIp then         begin           HaveList := true;           break;         end;       end;       If Not HaveList then       begin         xItem := Netlist.Items.Add;         Tmpstr := session[i].CName;         CName := Tmpstr;         if trim(Tmpstr) = '' then         begin           CName := CIp;           Tmpstr := '未知';         end;         xItem.Caption := Tmpstr;         xItem.SubItems.Add(CIp);         xItem.SubItems.Add('未知');         xItem.SubItems.Add(inttostr(session[i].CHandle));         xItem.ImageIndex := 0;         dec(CountConnection);         viewinfo('客户端 ' + CName + ' 成功与服务器建立了连接',6);               end;     end;   end;   UserConOrDisCon.Enabled := True; except   dec(CountConnection);   UserConOrDisCon.Enabled := True; end; end;    客户端下线时: procedure TFrmMain.Server1ClientDisconnect(Sender: TObject;   Socket: TCustomWinSocket); var   i,j:integer; begin   try     Disconlist.Items.Add(inttostr(Socket.SocketHandle));     if not UserDisCon.Enabled then UserDisCon.Enabled := true;   except     {**}   end; end;    發表人 - jackalan168 於 2004/01/04  20:02:39 發表人 -
AB
高階會員


發表:166
回覆:262
積分:125
註冊:2003-08-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-05 13:36:36 IP:61.221.xxx.xxx 未訂閱
1 AB大哥 庵只喜歡 ab 二字 大哥是 版主的問題 哈哈 2 【Delphi】【問題】求救!就要交不了差了,[大家爬ㄖr~~~kk~     改一下標語  求救-2字 庵最不喜歡 因為版規 明訓 這問題可以問 版上 版主 大仔 你可以自己在KTOP用ClientSocket , indy 搜索 關鍵字 資料    這方面的高手 我可以這樣說 KTOP版主都是耶 由其是那為包子的RaynorPao  版主  哈哈    只能建議 欲速則不達  把原本c/s改為 3方 這樣可以達成net to net 多台的問題 大多是記憶體在資料引用 ( 八否 ) 也許會很質疑不過嗎 是真ㄟ 你看看此篇的軟體 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=41349 原作者所po的資料訊息 已改寫 你看不到了 哈哈 原作者 已放棄indy的元件 我想msdn是最多這方面資料的  http://delphi.ktop.com.tw/topic.php?topic_id=20270 http://delphi.ktop.com.tw/topic.php?topic_id=21611 http://delphi.ktop.com.tw/topic.php?topic_id=22199 http://delphi.ktop.com.tw/topic.php?topic_id=23477 http://delphi.ktop.com.tw/topic.php?topic_id=24607 http://delphi.ktop.com.tw/topic.php?topic_id=18769 http://delphi.ktop.com.tw/topic.php?topic_id=19830 http://delphi.ktop.com.tw/topic.php?topic_id=23060 http://delphi.ktop.com.tw/topic.php?topic_id=23079 其他的自己找把 ========================================================== 搜尋:Socket 本次搜尋共找到634筆! 用手+眼+腦+pc+開發工具+耐力+體力+失敗力+KTOP+胡思亂想 ok   快改 標語 把 
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-26 13:52:13 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-06 1:56:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!