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

一个运行很慢的SOCKET线程源码,请各位看看。

答題得分者是:yhzxj
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-22 09:03:59 IP:61.155.xxx.xxx 未訂閱
我有一个运行很慢的SOCKET线程源码,请各位看看。 const_code.pas //*********** unit const_code; interface var userinfostr:string; const server_code='_001'; const conn_buffer_clear='_000'; const conn_login='_001'; const conn_login_user_get='_101'; const conn_login_user_reg='_201'; const conn_login_user_check='_301'; const conn_test='_002'; const conn_scr='_003'; const conn_file='_004'; const conn_text='_005'; const conn_cmd='_006'; implementation end. //##################################### unit2.pas //**************************** unit Unit2; interface uses Classes, StdCtrls, SysUtils, ScktComp,const_code, Dialogs; type TMyServerThread = class(TServerClientThread) private FMemo: TMemo; FListBox,FListBox2,FListBox3,FListBox4, FListBox5, FListBox6 : TListBox; Buffer: string; buffersize:integer; protected procedure ClientExecute; override; procedure DoDisplayBuffer; public constructor Create(Memo: TMemo; listbox2,listbox3,listbox4,listbox5,listbox6,ListBox: TListBox; CreateSuspended: Boolean; ASocket: TServerClientWinSocket); end; implementation { TMyServerThread } constructor TMyServerThread.Create(Memo: TMemo;listbox2,listbox3,listbox4,listbox5,listbox6,ListBox: TListBox; CreateSuspended: Boolean; ASocket: TServerClientWinSocket); begin inherited Create(CreateSuspended,ASocket); FMemo := Memo; FListBox := ListBox; FListBox2 :=ListBox2; FListBox3 :=ListBox3; FListBox4 :=ListBox4; FListBox5 :=ListBox5; FListBox6 :=ListBox6; end; procedure TMyServerThread.DoDisplayBuffer(); var con: Integer; begin //在MEMO中显示客户端发送的信息 FMemo.Lines.Add('线程ID<' IntToStr(threadID) '>远程客户端<' ClientSocket.RemoteHost ':' IntToStr(ClientSocket.RemotePort) '> : ' Buffer '<' datetimetostr(now()) '>' ); //将收到的消息发给每个客户端 if buffersize> 3 then for con:=0 to ClientSocket.ServerWinSocket.ActiveConnections-1 do ClientSocket.ServerWinSocket.Connections[con].SendText(copy(buffer,5,buffersize-4) '<' datetimetostr(now()) '>'); end; procedure TMyServerThread.ClientExecute; var Stream : TWinSocketStream; n:integer; begin //程序正在运行 ,并且CLIENTSOCKET是活动的 while (not Terminated) and ClientSocket.Connected do begin try Stream := TWinSocketStream.Create(ClientSocket, 60000); try //填充BUFFER // FillChar(Buffer,sizeof(buffer),0); if Stream.WaitForData(60000) then if buffersize=0 then ClientSocket.Close else begin buffersize:=length(Buffer); //缓冲清除 if copy(Buffer,1,4)=conn_buffer_clear then Stream.CleanupInstance ; //检测合法 if copy(Buffer,1,4)=conn_login_user_check then begin fListBox2.Items.Add(ClientSocket.RemoteHost); fListBox3.Items.Add(ClientSocket.RemoteAddress) ; fListBox4.Items.Add(inttostr(ClientSocket.RemotePort)); fListBox5.Items.Add(inttostr(threadID)); fListBox6.Items.Add(copy(buffer,5,buffersize-4)); Buffer:=conn_login_user_check '<消息服务系统>:用户【' copy(Buffer,5,buffersize-4) '】已经上线。'; buffersize:=length(Buffer); end; //获取当前用户信息 if copy(Buffer,1,4)=conn_login_user_get then begin userinfostr:=''; for n:=0 to fListBox6.Count-1 do userinfostr:=userinfostr '【' fListBox6.Items.Strings[N] '】'; Buffer:=conn_login_user_get userinfostr; buffersize:=length(Buffer); end; //成功登陆 if copy(Buffer,1,4)=conn_login then ; //发信息 synchronize(DoDisplayBuffer); end; finally Stream.Free; end; except HandleException; end; end; end; end.
------
风花雪月 e梦情缘
yhzxj
一般會員


發表:3
回覆:3
積分:6
註冊:2003-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-22 17:58:59 IP:61.155.xxx.xxx 未訂閱
可能是60000等待时间长了吧, 关注!! 等待其它高手回答!!!
系統時間:2024-05-04 14:12:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!