基本情况:
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;基本情况就是这样了,请大家帮帮忙,谢谢!
解决方案 »
- 如何得到ADO连接字符串啊?
- 急!!! fastreport 中的每页小计,最后一页有小计和总计
- 高分求fastreport 2.53版本控件,有者请慷慨救援!!!!
- 窗体之间传值
- 为什么ShowMessage被编译器说成是Undeclared identifier?
- 求助:谁有Delphi7.0的Rx.library控件包
- 拿着别人的程序该怎么读?
- 流传送图象的问题
- WebBrowser中希望能够直接打开文件,而不出现’打开、下载到磁盘’对话框,有什么办法?
- 网页获取所有链接问题
- 控件数组的问题????????????????????????
- 修改窗体颜色的问题???????????????????
在线程中适当的地方 + Sleep(10)
不过服务端用TServerSocket可能太...用indy吧,如果以后连接多了,还是自己写IOCP比较可靠