求救!就要交不了差了,请大家帮个忙呀~~~谢谢~ |
尚未結案
|
jackalan168
一般會員 發表:6 回覆:12 積分:8 註冊:2004-01-02 發送簡訊給我 |
程式在客户断少的时候可以正常运行,但如果客户端很多,如: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 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |