WinSocket网络通讯问题!急!!

国风 2005-05-14 11:53:36
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”就会执行失败,第二次就成功了!请高手指点如何解决??谢了!
...全文
151 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pdbird 2005-05-17
  • 打赏
  • 举报
回复
是因为网络响应时间没有跟上的原因吧。
sandyboy 2005-05-16
  • 打赏
  • 举报
回复
没做过网络通讯的项目。学习。。。。。。
国风 2005-05-16
  • 打赏
  • 举报
回复
问题解决,把客户端发送的请求信息写到ClientSocket1Write事件中去就OK了!怎么会没人知道?郁闷~~
国风 2005-05-15
  • 打赏
  • 举报
回复
哎~没人碰到过这个问题吗?还是我没说清楚??
国风 2005-05-14
  • 打赏
  • 举报
回复
//客户端为非阻塞式
procedure TFrm_Main.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(FormatDatetime('YYYYMMDD',date)+':'+Socket.ReceiveText);
ClientSocket1.Active := False;
end;
godear 2005-05-14
  • 打赏
  • 举报
回复
这个样, 没法找问题

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧