基本情况:
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;基本情况就是这样了,请大家帮帮忙,谢谢!

解决方案 »

  1.   

    并发数也不大呀可以考虑把gprs机器里面的精震时间拨一下
      

  2.   

    gprs设备应该没有问题,我还是认为是服务端的问题。
      

  3.   

    用TCP客户端软件试一下,如果没问题的话,可能是GRPS硬件终端的问题。
      

  4.   

    GPRS连接不一定总是很快成功的。
      

  5.   

    我用delphi写了模拟GPRS设备的程序,运行了100个,同时连接服务端并发送数据,也是连接不完,也就70多个正常连接,我从网上下载了一个TCP服务端软件,让那24个设备连接这个服务端软件,结果连接数都正常,我感觉还是服务端的问题。
      

  6.   

    看一下 CPU 的使用率 如果太高
    在线程中适当的地方 + Sleep(10)
      

  7.   

    可不可能是到整点的时候,你的Server线程cpu占用太厉害,导致其他部分连接没有反应。为什么不把设备排队呢。给每个设备编号1,2,3,4,在整点+编号 的时间建立连接,错开高峰。
      

  8.   

    移动的基站同时在线数可是有限制的,我们就碰到过某个地点同时只有20个GPRS终端上线的情况,搞了半天原来是移动的问题;
    不过服务端用TServerSocket可能太...用indy吧,如果以后连接多了,还是自己写IOCP比较可靠