ClientSocket1.Host :=shost;
    ClientSocket1.Port := strtoint(sport);    ClientSocket1.Active := false;
    ClientSocket1.Active := true;
    cmd1 := socket_rec_line1(ClientSocket1.Socket, 5 * 1000);
    if pos('220',cmd1)=0 then exit; ////////这里返回值正常////////    ClientSocket1.Socket.SendText('USER '+trim(sname)+'/r/n');
    ClientSocket1.Socket.SendText('PASS '+trim(spass)+'/r/n');
    cmd1 := socket_rec_line1(ClientSocket1.Socket, 5 * 1000); ///////这里超时,cmd1返回空值,为什么? /////

解决方案 »

  1.   

    啊,原来要改成这样!!!
     ClientSocket1.Socket.SendText('USER '+trim(sname) + #13#10);
    我自己解决了,但这问题的分数不能浪费,我要问一个其它的问题补数,迟点我就会提出来,一解决分数照送
      

  2.   

    ClientSocket1.Socket.SendText('USER '+trim(sname) + #13#10);
        cmd1 := socket_rec_line1(ClientSocket1.Socket, 5 * 1000);
        ClientSocket1.Socket.SendText('PASS '+trim(spass) + #13#10);
        cmd1 := socket_rec_line1(ClientSocket1.Socket, 5 * 1000);
        if pos('230',cmd1)=0 then exit;
        ClientSocket1.Socket.SendText('REST '+inttostr(100) + #13#10);
        cmd1 := socket_rec_line1(ClientSocket1.Socket, 5 * 1000);
        if pos('350',cmd1)=0 then exit;
        ClientSocket1.Socket.SendText('PASV' + #13#10);
        cmd1 := socket_rec_line1(ClientSocket1.Socket, 5 * 1000);
        ClientSocket1.Socket.SendText('TYPE  I' + #13#10);
        cmd1 := socket_rec_line1(ClientSocket1.Socket, 5 * 1000);
        ClientSocket1.Socket.SendText('REST '+inttostr(pos1) + #13#10);
        cmd1 := socket_rec_line1(ClientSocket1.Socket, 5 * 1000);
        if pos('350',cmd1)=0 then exit;
        
    到了这步我想下载一个文件该怎么写?怎样才能接收文件的数据?
    ClientSocket1.Socket.SendText('RETR  test.txt'+ #13#10);
    cmd1 := socket_rec_line1(ClientSocket1.Socket, 5 * 1000);
    这个好像是错误的,我上面是有个test.txt的文件,但返回的是空值
      

  3.   

    不要在使用NM和ServerSocket这类组件了Indy9.0.15做FTP服务器简单得很的http://lysoft.7u7.net
      

  4.   

    ClientSocket1.Socket.SendText('RETR  test.txt'+ #13#10);
    cmd1 := socket_rec_line1(ClientSocket1.Socket, 5 * 1000);不能继续用socket_rec_line1,因为前面返回的都是命令行,也可以说是字符串,但是现在你要接收的是一个二进制数据,要用buffer 来接收,
      

  5.   

    to zhujunfeng(ericss) :那该怎么写才能读取那些数据?用一个while来循环读取那个数据?怎么写?
      

  6.   

    ClientSocket1.Socket.SendText('RETR  test.txt'+ #13#10);
        while ClientSocket1.Active = true do begin
          zeromemory(@buf1, readmemory); 
          FSocketStream := TWinSocketStream.Create(ClientSocket1.Socket, 15000);
          if not FSocketStream.WaitForData(timeout) then begin
            break;
          end
          else begin
            if bigflag = true then
              rec1 := FSocketStream.Read(buf1, readmemory)
            else
              rec1 := FSocketStream.Read(buf1, 1);
          end;
          blockwrite(f1, buf1, rec1);
        end;
    我这样接着写也不行,只接受一段以下英文
    426-Maximum disk quota limited to 2000000 Kbytes
        Used disk quota 271339 Kbytes, available 1728660 Kbytes
    426 Transfer aborted.
    227 Entering Passive Mode (211,154,104,140,16,238)
    200 Type set to I.
    接着下一次循环就超时了,不在循环读,有谁能解决?
      

  7.   

    呵呵,我有点懂你的代码,但我自己做的一点问题都没有,我用的是TIdTCPClient