Server端:
procedure TServerThread.ClientExecute;
var
Stream: TWinSocketStream;
sSendText: string;
procedure FailProcess;
begin
if Assigned(ClientSocket) then
begin
if ClientSocket.Connected then
ClientSocket.Close;
end;
Terminate;
end;
begin
inherited FreeOnTerminate := True;
while (not Terminated) and ClientSocket.Connected do
begin
Stream := TWinSocketStream.Create(ClientSocket,giWaitTime);
try
try
if Stream.WaitForData(giWaitTime) then
begin
....//处理操作
ClientSocket.SendText(sSendText);
end
else
FailProcess;
except
on E: exception do
begin
Memo1.lines.add('监听过程中出现异常:' + E.Message);
Exit;
end;
end;
finally
if not Terminated then
FailProcess;
Stream.Free;
end;
end;
end;
Client端:
procedure TFrm_Main.BitSendClick(Sender: TObject);
var st: string;
begin
ClientSocket1.Address := Trim(Edt_ip.Text);
ClientSocket1.Port := StrtoInt(Edtport.Text);
if not ClientSocket1.Active then
ClientSocket1.Active := True; st := MemoSend.Text;
ClientSocket1.Socket.SendText(st);
end;
问题:每次请求服务,client端请求二次server端才能接收到消息。单步跟踪后发现:第一次请求每次到“if Stream.WaitForData(giWaitTime) then”就会执行失败,第二次就成功了!请高手指点如何解决??谢了!
procedure TServerThread.ClientExecute;
var
Stream: TWinSocketStream;
sSendText: string;
procedure FailProcess;
begin
if Assigned(ClientSocket) then
begin
if ClientSocket.Connected then
ClientSocket.Close;
end;
Terminate;
end;
begin
inherited FreeOnTerminate := True;
while (not Terminated) and ClientSocket.Connected do
begin
Stream := TWinSocketStream.Create(ClientSocket,giWaitTime);
try
try
if Stream.WaitForData(giWaitTime) then
begin
....//处理操作
ClientSocket.SendText(sSendText);
end
else
FailProcess;
except
on E: exception do
begin
Memo1.lines.add('监听过程中出现异常:' + E.Message);
Exit;
end;
end;
finally
if not Terminated then
FailProcess;
Stream.Free;
end;
end;
end;
Client端:
procedure TFrm_Main.BitSendClick(Sender: TObject);
var st: string;
begin
ClientSocket1.Address := Trim(Edt_ip.Text);
ClientSocket1.Port := StrtoInt(Edtport.Text);
if not ClientSocket1.Active then
ClientSocket1.Active := True; st := MemoSend.Text;
ClientSocket1.Socket.SendText(st);
end;
问题:每次请求服务,client端请求二次server端才能接收到消息。单步跟踪后发现:第一次请求每次到“if Stream.WaitForData(giWaitTime) then”就会执行失败,第二次就成功了!请高手指点如何解决??谢了!
解决方案 »
- 如何在一个TDBChart中显示多个Series?并且可以手工隐藏特定的Series,显示特定的Series?急!!!
- 在Sevice Application程序中,可以正常使用ShellExecute吗?
- 怎样彻底删除数据?
- 如何实现带有checkbox的ttreeviw,我是想做个类似瑞兴杀毒的那个操作界面。
- 我们这样的公司真的能开发软件吗?
- 为什么我的pws安装时提示需要winsock32??
- ******DSPACK播放远程站点上的视频文件的问题,请高手进来指点!******
- WebBrowser1里的图片没有拷贝到剪切板?
- 请问用Currency定义的变量是什么类型?????????????????
- 简单的表达式问题,高手请帮忙看看这段语句为何出错?
- 我用SOCKET的方式进行点对点的文件传输,现在想要将一个目录中的文件包括子目录都传输过去,给点思路或例子
- 急,在线等.关于stringgrid颜色问题.
procedure TFrm_Main.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(FormatDatetime('YYYYMMDD',date)+':'+Socket.ReceiveText);
ClientSocket1.Active := False;
end;