我用delphi做了一个socket通讯程序,用来查询服务端的系统时间,我还在客户端做了一个时间同步的功能。
这是时间同步的代码:procedure TfrmClientMain.btnTimeSyncClick(Sender: TObject);begin   if messagebox( 0,'确定要与服务器时间同步吗? ','提示',MB_OKCANCEL
   +MB_ICONQUESTION)= idok   then   //选择了yes   begin   ClientSocket.Socket.SendText('1111');//向服务器发送讯息   Memo1.Lines.Add(ClientSocket.Socket.ReceiveText);//接收服务器的讯息   DateTime:=StrToDateTime(RightStr(trim(Memo1.Lines.Strings[Memo1.Lines.Count-1]),17) );   //获得时间(TDateTime格式)   DateTimeToSystemTime(DateTime,systemtime);   //把Delphi的TDateTime格式转化为API的TSystemTime格式   SetLocalTime(SystemTime)   //设置系统时间   end;end;但我发现这样接收到的讯息在Memo1中下面总会空出一行,就两条讯息间会空一行,但是我发送的讯息并没有空,这是为什么?
下面是我发送讯息的代码:procedure TfrmServerMain.ServerSocketClientRead(Sender: TObject;Socket: TCustomWinSocket);
var
i:integer;
begin
//将从客户端读取的信息添加到Memo1中
Memo1.Lines.Add(Socket.ReceiveText);
for i:=0 to sessions do
begin
//取得匹配的客户端
if session[i].CHandle = Socket.SocketHandle then
begin
session[i].CSocket.SendText('回复客户端'+' ==>'+#13#10+'现在时间是:'+Label2.Caption);
end;
end;
end;我想了很久都想不通,到底为什么会空出这一行?呼教大牛!!!

解决方案 »

  1.   

    SOCKET 接收可能有一个符号标示#13 回车  标示本次接收结束的所以发送一次信息实际 末尾会有一个#13作为结束标示因此你在接收的时候转文本时才出现了 换行操作
      

  2.   

      ClientSocket.Socket.SendText('1111');//向服务器发送讯息
      //这里刚发,马上就去取,发送完之后到取之间最多几十个时钟周期,系统是不能收到回执文本的
      for i:=0 to 100 do begin
       S := ClientSocket.Socket.ReceiveText;
       if S<>'' then begin
          Memo1.Lines.Add(S);//接收服务器的讯息
          Break;
       end;
       Application.ProcessMessage;
       Sleep(20);
      end;
      

  3.   

    建议你不要用控件,用winsock函数实现
      

  4.   

    session[i].CSocket.SendText('回复客户端'+' ==>'+#13+'现在时间是:'+Label2.Caption);
    会怎么样?