各位大侠;
  请帮我 把这个问题解决,我等着急用,明天就要交任务了,谢谢!!
1.从客户端这边发数据到服务器那边,三秒发一次,如果服务器收到消息,就发任一条消息,如果服务器没有收到消息,客户端连续发5次,5次服务器没有收到消息就不在发,关于时间我在设置TTimer的interval属性设置为3000,在timer的事件中循环5次不是知道怎样控制。我如何判断数据在服务器上接受到数据,怎样把他现实,请看一下我写的代码:
var
flag_s:integer;  // 定义一个全局变量 ,次数
procedure TForm1.fs;        定义一个过程,把发送消息保存在本地的LOG文件里
begin
flag_s:=1;
 ClientSocket.Open;
 ClientSocket.Socket.SendText(trim(edit1.text));
  flag_s:=Form1.flag_s+1;         //每次次数都进行增加:
end;
procedure TForm1.ClientSocketRead(Sender: TObject; Socket:TCustomWinSocket);
var
  strread:string;
beginstrread:=Socket.ReceiveText;
 Memo1.Lines.Add('服务器返回消息:'+strread);
end;
procedure TForm1.Timer1Timer(Sender: TObject);  
          //我不知道这里怎样控制次数和服务器接受到数据就不在发这条消息,应该发下条数据。
begin
 if    flag_s<5 then       // 控制次数 
    fs        
end;
end.
procedure TForm1.Button1Click(Sender: TObject);
begin
 fs;                //当我点两次就反映了一次,不知是什么原因。
end;
补充以下,我发送的记录是这样的 ,我先发一条记录,如果服务器有响应的话就不发了,退出,如果没有响应的话就继续发,发到5次就不发了,请高手帮我看一下代码。我等着急用,明天交任务了,我还是第一接触SOCKET

解决方案 »

  1.   

    在 ClientSocketRead 中复位判断 flag_s := 5;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     flag_s := 0;
     
     fs;                //当我点两次就反映了一次,不知是什么原因。
    end;
      

  2.   

    在 ClientSocketRead 中复位判断 flag_s := 5;什么判断!!
    问题还是没有解决了
      

  3.   

    var
      flag_s:integer;procedure TForm1.FormCreate(Sender: TObject);
    begin
      flag_s:=1;
      Timer1.Interval := 1000;
      Timer1.Enabled := True;
    end;procedure TForm1.fs;
    begin
      ClientSocket.Open;
      ClientSocket.Socket.SendText(trim(edit1.text));
      flag_s:=Form1.flag_s+1;
    end;procedure TForm1.Timer1Timer(Sender: TObject);  
    begin
      if flag_s < 5 then
        fs
      else
        Timer1.Enabled := False;
    end;procedure TForm1.ClientSocketRead(Sender: TObject; Socket:TCustomWinSocket);
    var
      strread:string;
    begin
      strread:=Socket.ReceiveText;
      Memo1.Lines.Add('服务器返回消息:'+strread);
      flag_s:=1;
    end;end.
      

  4.   

    各位大侠;
      请帮我 把这个问题解决,我等着急用,明天就要交任务了,谢谢!!
    1.从客户端这边发数据到服务器那边,三秒发一次,如果服务器收到消息,就发任一条消息,如果服务器没有收到消息,客户端连续发5次,5次服务器没有收到消息就不在发,关于时间我在设置TTimer的interval属性设置为3000,在timer的事件中循环5次不是知道怎样控制。我如何判断数据在服务器上接受到数据,怎样把他现实,请看一下我写的代码:
    var
    flag_s:integer;  // 定义一个全局变量 ,次数procedure TForm1.fs;        定义一个过程,把发送消息保存在本地的LOG文件里
    var
    TextFileVar: Textfile;
    SourcePath:string;
    begin
    flag_s:=1;
    SourcePath := ExtractFileDir(Application.ExeName);
    SourcePath:=SourcePath+'\'+'ReceiveStr.log';
     ClientSocket.Open;
     ClientSocket.Socket.SendText(trim(edit1.text));
      flag_s:=Form1.flag_s+1;         //每次次数都进行增加:
     AssignFile(TextFileVar,SourcePath);
     Append(TextFileVar);
     write(TextFileVar,#13);
     write(TextFileVar,'client send:');
     write(TextFileVar,trim(Form1.edit1.text));
     write(TextFileVar,'  ');
     write(TextFileVar,datetimetostr(now()));
     closefile(TextFileVar);
    end;procedure TForm1.ClientSocketRead(Sender: TObject; )//把服务器返回的消息写在本地的log文件里。
      Socket: TCustomWinSocket);
    var
      TextFileVar: Textfile;
      SourcePath, strread:string;
    begin
    SourcePath := ExtractFileDir(Application.ExeName);
    SourcePath:=SourcePath+'\'+'ReceiveStr.log';
    strread:=Socket.ReceiveText;
     AssignFile(TextFileVar,SourcePath);
     Append(TextFileVar);
     write(TextFileVar,#13);
     write(TextFileVar,'ServerReturn:');
     write(TextFileVar,strread);
     write(TextFileVar,'  ');
     write(TextFileVar,datetimetostr(now()));
     closefile(TextFileVar);
     Memo1.Lines.Add('服务器返回消息:'+strread);
    end;
    procedure TForm1.Timer1Timer(Sender: TObject);  
              //我不知道这里怎样控制次数和服务器接受到数据就不在发这条消息,应该发下条数据。
    begin
     if    flag_s<5 then       // 控制次数 
        fs        
    end;
    end.
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     fs;                //当我点两次就反映了一次,不知是什么原因。
    end;
      

  5.   

    各位大侠;
      请帮我 把这个问题解决,我等着急用,明天就要交任务了,谢谢!!
    1.从客户端这边发数据到服务器那边,三秒发一次,如果服务器收到消息,就发任一条消息,如果服务器没有收到消息,客户端连续发5次,5次服务器没有收到消息就不在发,我如何判断在客户端接受到服务器上的数据,怎样把他实现,循环5次现在实现了,,请看一下我写的代码:
    var
      flag_s:integer;procedure TForm1.FormCreate(Sender: TObject);
    begin
      flag_s:=1;
      Timer1.Interval := 1000;
      Timer1.Enabled := True;
    end;procedure TForm1.fs;
    begin
      ClientSocket.Open;
      ClientSocket.Socket.SendText(trim(edit1.text));
      flag_s:=Form1.flag_s+1;
    end;procedure TForm1.Timer1Timer(Sender: TObject);  
    begin
      if flag_s < 5 then
        fs
      else
        Timer1.Enabled := False;
    end;procedure TForm1.ClientSocketRead(Sender: TObject; Socket:TCustomWinSocket);
    var
      strread:string;
    begin
      strread:=Socket.ReceiveText;
      Memo1.Lines.Add('服务器返回消息:'+strread);
      flag_s:=1;
    end;
    end.