我写了delphi的客户端和服务端。但是客户端在发送完数据之后,就不能接受到服务端发回的消息。请高手指教一下!代码如下:客户端部分:
 ClientSocket1.Open;
 s := TWinSocketStream.Create(ClientSocket1.Socket, 60000);
// f := TFileStream.Create(OpenDialog1.FileName, fmShareDenyWrite);
 sendstr:='abcde';
// move(sendstr^,buff,strlen(sendstr));
 CopyMemory(@buff,   @sendstr[1],   Length(sendstr)); Try
   s.Write(buff,length(buff)+1);   fillchar(recbuff,sizeof(recbuff),0);
   if s.WaitForData(10000) then
   begin
       s.Read(Recbuff,length(recbuff));
   end;服务端部分:While Not Terminated And ClientSocket.Connected Do
 Begin
  try
    SocketStream := TWinSocketStream.Create(ClientSocket, 60000);
//    F := TFileStream.Create('c:\afile.exe', fmCreate);
    try
      FillChar(ReceiveBuffer, sizeof(ReceiveBuffer), 0);
      If SocketStream.WaitForData(5000) Then
       Repeat
         BytesRead := SocketStream.Read(ReceiveBuffer,length(ReceiveBuffer));
         s:= ReceiveBuffer;
         if BytesRead = 0 then
         begin
           sendbuff:='123123';
           SocketStream.Write(sendbuff,length(sendbuff)+1);
//           ClientSocket.Close         end
         Else
         begin
         end;
 //         F.WriteBuffer(ReceiveBuffer, BytesRead);
       Until  Not SocketStream.WaitForData(2000);    finally
      SocketStream.Free;
      ClientSocket.Close;
 //     f.Free;
    end;
  except
  end;
 End;谢谢啦!

解决方案 »

  1.   

    没有通过协议,用TCP/IP 协议来判断是否收到信号。具体的你还是查一下相关的资料吧,我只知道大概方法,具体没有做过的。正在学习中。
      

  2.   

            if BytesRead = 0 then
            begin
              sendbuff:='123123';
              SocketStream.Write(sendbuff,length(sendbuff)+1);
    //          ClientSocket.Close        end你的代码
    服务端是判断接收数据的大小为零时,才发送,条件写错了
            if BytesRead > 0 then
            begin
              sendbuff:='123123';
              SocketStream.Write(sendbuff,length(sendbuff)+1);
    //          ClientSocket.Close        end