W
wenbozhihuei
Unregistered / Unconfirmed
GUEST, unregistred user!
基本情况:
GPRS服务端运行在XP系统的电脑上,XP系统的连接数已经改为2000,GPRS硬件设备安装在现场,一共24个,GPRS每到整点时间就连接服务端并发送数据,如果连接不成功,在到10分再连接发送数据。
出现的问题:
正常情况下每到整点这个24个设备都应该正常与服务端建立连接,但现在的情况是每到整点,这些设备只有10来个能够连接到服务端,到整点的10分时,剩下的几个才与服务端建立连接,而且这24个设备交替出现这种情况。(GPRS设备是建立连接成功后等待3-5秒后发送数据)。
代码:
我用delphi7开发的服务端,使用ServerSocket控件,ServerType的属性为stThreadBlocking,ThreadCacheSize=500,
procedure TFrm_Main.ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
SocketThread:=TThread_Socket.Create(false,ClientSocket);//创建一个线程
end;
建立一个线程:TThread_Socket
procedure TThread_Socket.ClientExecute;
var
Data: array[0..1023] Of char;
SocketStream: TWinSocketStream;
ms:integer;
begin
FreeOnTerminate := True;
ms:=30000;
while not Terminated and ClientSocket.Connected do
begin
try
try
SocketStream:=TWinSocketStream.Create(ClientSocket,ms);
FillChar(Data, SizeOf(Data), 0);
if SocketStream.WaitForData(ms) then
begin
try
if SocketStream.Read(Data, SizeOf(Data))=0 Then
begin
ClientSocket.Close;
Terminate;
end
else
begin
TempInBuff:=Data;
Delete(TempInBuff,Pos(#13#10,TempInBuff),2);
Synchronize(GetPack);//GetPack为处理数据的过程。
end;
except
ClientSocket.Close;
Terminate;
end;
end
else
begin
ClientSocket.Close;
Terminate;
end;
finally
SocketStream.Free;
end;
except
ClientSocket.Close;
Terminate;
end;
end;
end;
基本情况就是这样了,请大家帮帮忙,谢谢!
GPRS服务端运行在XP系统的电脑上,XP系统的连接数已经改为2000,GPRS硬件设备安装在现场,一共24个,GPRS每到整点时间就连接服务端并发送数据,如果连接不成功,在到10分再连接发送数据。
出现的问题:
正常情况下每到整点这个24个设备都应该正常与服务端建立连接,但现在的情况是每到整点,这些设备只有10来个能够连接到服务端,到整点的10分时,剩下的几个才与服务端建立连接,而且这24个设备交替出现这种情况。(GPRS设备是建立连接成功后等待3-5秒后发送数据)。
代码:
我用delphi7开发的服务端,使用ServerSocket控件,ServerType的属性为stThreadBlocking,ThreadCacheSize=500,
procedure TFrm_Main.ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
SocketThread:=TThread_Socket.Create(false,ClientSocket);//创建一个线程
end;
建立一个线程:TThread_Socket
procedure TThread_Socket.ClientExecute;
var
Data: array[0..1023] Of char;
SocketStream: TWinSocketStream;
ms:integer;
begin
FreeOnTerminate := True;
ms:=30000;
while not Terminated and ClientSocket.Connected do
begin
try
try
SocketStream:=TWinSocketStream.Create(ClientSocket,ms);
FillChar(Data, SizeOf(Data), 0);
if SocketStream.WaitForData(ms) then
begin
try
if SocketStream.Read(Data, SizeOf(Data))=0 Then
begin
ClientSocket.Close;
Terminate;
end
else
begin
TempInBuff:=Data;
Delete(TempInBuff,Pos(#13#10,TempInBuff),2);
Synchronize(GetPack);//GetPack为处理数据的过程。
end;
except
ClientSocket.Close;
Terminate;
end;
end
else
begin
ClientSocket.Close;
Terminate;
end;
finally
SocketStream.Free;
end;
except
ClientSocket.Close;
Terminate;
end;
end;
end;
基本情况就是这样了,请大家帮帮忙,谢谢!