我用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;我想了很久都想不通,到底为什么会空出这一行?呼教大牛!!!
这是时间同步的代码: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;我想了很久都想不通,到底为什么会空出这一行?呼教大牛!!!
解决方案 »
- 关于delphi中fastreport的问题
- 请大家给一个思路
- 拖放外部文件到指定控件
- 有没有可能实现这样: 局域网内,从A计算机能检测到B 计算机的一个myapp.exe程式是否运行?
- dbgrid多選操作問題
- 关于‘尚未调用CoInitialize‘的错误提示如何解决
- Delphi如何实现自动登录博客?(模拟输入帐号,密码,按登陆按钮)
- 关于stringgrid中的defaultdrawing属性问题
- 在treeview中,我如何得到点击节点的index?
- 请教不同form之间传递数值的问题
- 字符串中含有"&"字符,怎么办?Delphi好像会自动处理掉
- 备份Firebird数据库时遇到的问题
//这里刚发,马上就去取,发送完之后到取之间最多几十个时钟周期,系统是不能收到回执文本的
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;
会怎么样?