我现在的情况是这样的,我在服务器上编了个SOCKET的程序,作用是做监听。。 然后我在主程序中有个CLIENTSOCKET 我从CLIENTSOCKET中发送消息给服务器的SOCKET程序,然后服务器端接收后再回复给CLIENT端
现在问题来了,我在程序中函数中调用CLIENT的SENDTEXT 发送消息给SERVERSOCKET,但是服务器返回的消息要在CLIENT的ONREAD事件中才能读取,两个是异步的。。我现在该怎么办?大家帮忙啊
现在问题来了,我在程序中函数中调用CLIENT的SENDTEXT 发送消息给SERVERSOCKET,但是服务器返回的消息要在CLIENT的ONREAD事件中才能读取,两个是异步的。。我现在该怎么办?大家帮忙啊
然后你就在OnRead里把数据发送给服务器
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.
用一个消息循环来作等待
一旦OnRead有数据返回了,就跳出循环,返回。。