我现在的情况是这样的,我在服务器上编了个SOCKET的程序,作用是做监听。。 然后我在主程序中有个CLIENTSOCKET 我从CLIENTSOCKET中发送消息给服务器的SOCKET程序,然后服务器端接收后再回复给CLIENT端 
现在问题来了,我在程序中函数中调用CLIENT的SENDTEXT 发送消息给SERVERSOCKET,但是服务器返回的消息要在CLIENT的ONREAD事件中才能读取,两个是异步的。。我现在该怎么办?大家帮忙啊

解决方案 »

  1.   

    你让服务器先发数据给你表示连接成功,
    然后你就在OnRead里把数据发送给服务器
      

  2.   

    把client端的clientType设置为blocking模式,下面是client端源码:unit CltMainFormUnit;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ScktComp, StdCtrls;type
      TClientMainForm = class(TForm)
        ClientSocket: TClientSocket;
        cbConnect: TCheckBox;
        edSend: TEdit;
        mmOutput: TMemo;
        procedure cbConnectClick(Sender: TObject);
        procedure edSendKeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      ClientMainForm: TClientMainForm;implementation{$R *.dfm}procedure TClientMainForm.cbConnectClick(Sender: TObject);
    begin
      ClientSocket.Active := cbConnect.Checked;
    end;procedure TClientMainForm.edSendKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    var
      Str: String;
      Stream: TWinSocketStream;
      Len: Integer;
    begin
      if Key = 13 then
      begin
        if edSend.Text <> '' then
        begin
          if ClientSocket.Active then
          begin
            Str := edSend.Text;
            Stream := TWinSocketStream.Create(ClientSocket.Socket, 3000);
            Stream.Write(Char(Str[1]), Length(edSend.Text));
            if Stream.WaitForData(3000) then
            begin
              SetLength(Str, 255);
              Len := Stream.Read(Char(Str[1]), 255);
              Delete(Str, Len + 1, 255 - Len);
              mmOutput.Lines.Add(Str);
            end
            else
            begin
            end;
          end;
        end;
      end;
    end;end.
      

  3.   


    用一个消息循环来作等待
    一旦OnRead有数据返回了,就跳出循环,返回。。