各位老大好,这个问题困扰了很长时间,给点建议,万分感谢
现象:
启动服务器端
启动客户端,这时发送接收正常
连接着关闭服务器端,然后客户端发送的第一条数据不提示错误
从第二条才提示,可以确定客户端没有问题,这应该是那里出错呢?
关闭服务器端看到端口没有立即关闭,这影响到客户端发送的第一条数据吗?
有没有可能关闭服务的同时直接关闭端口
服务器端关闭服务代码:
procedure TTodayForm.StopServer;
var
  List: TList;
  Count: Integer;
  AThread: TIdPeerThread;
begin
  if TCPS.Active then
  begin
    List := TCPS.Threads.LockList;
    try
      for Count := 0 to List.Count - 1 do
      try
        AThread := TIdPeerThread(List.Items[Count]);
        AThread.Connection.Disconnect;
      except
      end;
    finally
      TCPS.Threads.UnlockList;
    end;
    TCPS.Active := False;
    TCPS.Bindings.Clear;
  end;
end;发现indy9的demo中basic server就没有这样的问题,看不出什么特别的地方
function TfrmMain.StopServer: Boolean;
begin
IdTCPServer.Active := false;
IdTCPServer.Bindings.Clear;
Result := not IdTCPServer.Active;
fServerRunning := result;
if result then
    begin
    StatusBar.SimpleText := 'Server stopped';
    lbProcesses.Items.Append('Server stopped');
    end
else
    begin
    StatusBar.SimpleText := 'Server running';
    lbProcesses.Items.Append('Server not stopped');
    end;
end;

解决方案 »

  1.   

    等待端口关闭后发送仍然不提示错误
    难道不是tidtcpserver,是客户端问题?
    可是indy9的demo中BasicClientServer目录下的client连接basic server没问题,
    连接我的服务器端就有问题,奇怪
      

  2.   

    它的Threads不用手动关闭的吧,(好象AThread.Connection.Disconnect;有时会导致一个类似于abort的异常,所以你后面的TCPS.Active := False;执行不到?)看看你的客户端是怎么发送的?
      

  3.   

    客户端直接TCPC.WriteLn(valuesstr);