1:TServerSocket是不是本身就带线程,如果客户端500个连接时,服务端要不要开线程。
2:我服务端之前为stNonBlocking,向客户端发送命令时能立刻返回。但目前只有一个客户端,并且约定每个客户端隔15秒就发
送一个心跳包来服务端,所以我就担心当客户端有500多个时,要不要另开线程来做。
我现在写了段线程程序,但发现数据收到很慢,不知是怎么回事?Type
ServerThread=Class(TServerClientThread)
Private
Protected
Public
Procedure ClientExecute;Override;
End;Procedure ServerThread.ClientExecute;
Var
intI,intN:Integer;
Buff1:Array[0..1023] Of Byte;
S:String;
Begin
FreeOnTerminate:=True;
Try
While (Not Terminated) And (ClientSocket.Connected) Do
Begin
Try
S:='';
intN:=ClientSocket.ReceiveLength ;
ClientSocket.ReceiveBuf(Buff1,intN);
For intI:=0 To intN-1 Do
S:=S+Int2Hex(Ord(Buff1[intI]),2);
//If S<>'' Then
// MessageBox(application.Handle,Pchar(s),'提示',MB_ICONINFORMATION+MB_OK);
If ((S<>'') And (S<>'FE0300000003FD') And (Copy(S,7,2)='00')) OR (Copy(S,5,2)='0D') OR
(Copy(S,5,2)='0E') Or (Copy(S,5,2)='0F') Then
addcmd.Add(s);//addcmd为TStringList,增加一些返回命令,比如设置灯的状态,然后客户端返回信息
If S='FE0300000003FD' Then
Begin
ClientSocket.SendBuf(Buff,intN);
End;
Except
ClientSocket.Close;
Terminate;
End;
End;
Except
ClientSocket.Close;
Terminate;
End;End;
procedure TmainFrm.ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
SocketThread:=ServerThread.Create(False,ClientSocket);
end;知道的朋友帮我改进下.
2:我服务端之前为stNonBlocking,向客户端发送命令时能立刻返回。但目前只有一个客户端,并且约定每个客户端隔15秒就发
送一个心跳包来服务端,所以我就担心当客户端有500多个时,要不要另开线程来做。
我现在写了段线程程序,但发现数据收到很慢,不知是怎么回事?Type
ServerThread=Class(TServerClientThread)
Private
Protected
Public
Procedure ClientExecute;Override;
End;Procedure ServerThread.ClientExecute;
Var
intI,intN:Integer;
Buff1:Array[0..1023] Of Byte;
S:String;
Begin
FreeOnTerminate:=True;
Try
While (Not Terminated) And (ClientSocket.Connected) Do
Begin
Try
S:='';
intN:=ClientSocket.ReceiveLength ;
ClientSocket.ReceiveBuf(Buff1,intN);
For intI:=0 To intN-1 Do
S:=S+Int2Hex(Ord(Buff1[intI]),2);
//If S<>'' Then
// MessageBox(application.Handle,Pchar(s),'提示',MB_ICONINFORMATION+MB_OK);
If ((S<>'') And (S<>'FE0300000003FD') And (Copy(S,7,2)='00')) OR (Copy(S,5,2)='0D') OR
(Copy(S,5,2)='0E') Or (Copy(S,5,2)='0F') Then
addcmd.Add(s);//addcmd为TStringList,增加一些返回命令,比如设置灯的状态,然后客户端返回信息
If S='FE0300000003FD' Then
Begin
ClientSocket.SendBuf(Buff,intN);
End;
Except
ClientSocket.Close;
Terminate;
End;
End;
Except
ClientSocket.Close;
Terminate;
End;End;
procedure TmainFrm.ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
SocketThread:=ServerThread.Create(False,ClientSocket);
end;知道的朋友帮我改进下.
解决方案 »
- AdvStringGrid数据如何实现循环滚动?就像火车站大厅那种!
- 关于decimal字段的存储方式和算术运算性能的问题
- 如何 将 两个表中的字段 显示在cxGrid的一个view中
- delphi有没有设置全部断点,或清楚所有断点的??
- WebBrowser 怎么向dreamweaver做成的网页传递数据
- 哪位兄台用过关闭本机与某一台主机网络连接的软件?在线等。
- 关于制作发送邮件的应用程序
- (100分)语音邮件的语音控件(.OCX)如何编写如有现成的最好.
- 在北京低价转让5本DELPHI编程的书,也许你用得着吧:)
- !!!哪为兄弟知道如何在win2000下对并口数据的读写,赶快进来,100分立刻给。
- Delphi2007中自定义控件的开发过程
- Delphi socket两个局域网之间通讯问题
欢迎博士,帮我看看吧,谢谢了。
还有一个问题是,当我在关闭服务端程序窗口时,要等半天才能关闭,我想是上面的线程循环导致的。怎么才能立即关闭服务端程序呢?感觉疑问太多了,请高手耐心解答