我在Delphi6 + indy8的环境下写了一个传输图片的程序
为了测试,我在client中每500毫秒自动给server端发送两张图片
但是在运行几个小时后出现"Cannot allocate socket"的异常
请各位老师给与帮助.
以下是client的部分代码:
发送是在单独的线程中运行的procedure TSendThread.Execute;
var
  m: TMemoryStream;
begin
  Self.FreeOnTerminate := True;  try
    FtcpClient.Connect;    m := TMemoryStream.Create;
    try
      m.Write(FData, SizeOf(FData));
      //发送车辆数据
      FtcpClient.WriteStream(m, True, True);      if TPackFunction(FData.FunID) = pfNew then
      begin
        //发送车牌图
        FtcpClient.WriteStream(PlateImg, True, True);
        //发送近景图
        FtcpClient.WriteStream(VehicleImg, True, True);
      end;
    finally
      m.Free;
      FtcpClient.Disconnect;
    end;  except
    on E: Exception do
    begin
      Form1.mmo1.Lines.Add(e.Message);
      WriteLog('异常, 原因:' + e.Message);
    end;
  end;end;

解决方案 »

  1.   

    Socket资源不足.设置如下注册表参数,然后重启计算机,如果是WinXP Sp2,需要修改连接数[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
    "MaxUserPort"=dword:0000fffe
      

  2.   

    可是我在每次发送完数据后调用了FtcpClient.Disconnect;啊
      

  3.   

    另外该程序在任务管理器中显示的线程数一直在增加
    参见
    http://topic.csdn.net/u/20080324/15/129d97b4-ecee-45a0-9591-a0a5d2a4f855.html