有一个发送文件的程序,每次
procedure Tfm_main.ServerSocket1ClientRead(Sender: TObject;
    Socket: TCustomWinSocket);过程中,接收到数据,我都要向外发数据
用socket.sendtext('aaaa');
而procedure Tfm_main.ClientSocket1Read(Sender: TObject;
    Socket: TCustomWinSocket);这个方法里面,不进行触发,是什么原因

解决方案 »

  1.   

    这样看不出问题,理论上是不会的,一定有其他问题。
    在ServerSocket1ClientRead里设置断点,能进来么?socket.SendText('aaaa')执行了么?
    下面写个例子,测试可以正常触发。
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, TeeEdit, ExtCtrls, TeeProcs, TeEngine, Chart, Series,ScktComp;type
      TForm1 = class(TForm)
        ClientSocket1: TClientSocket;
        ServerSocket1: TServerSocket;
        Button1: TButton;
        Memo1: TMemo;
        Memo2: TMemo;
        Button3: TButton;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
        procedure ClientSocket1Connect(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure ServerSocket1ClientConnect(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure Button3Click(Sender: TObject);
        procedure ServerSocket1ClientRead(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    TClient = class(TClientSocket);
    var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
        ServerSocket1.Active:=true;
        ClientSocket1.Open;
    end;procedure TForm1.ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
        Memo1.Lines.Add('Connect to server!')
    end;procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
        Memo2.Lines.Add('Client Connect!')
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
        ClientSocket1.Socket.SendText(Edit1.Text);
    end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
        Memo2.Lines.Add(Socket.ReceiveText);
        Socket.SendText('client date receive');
    end;procedure TForm1.ClientSocket1Read(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
        Memo1.Lines.Add(Socket.ReceiveText);
    end;end.
      

  2.   

    和你
    http://topic.csdn.net/u/20080426/16/a6b5f6f6-9298-45c0-8a90-492b9495ce89.html
    这个帖子里是一个问题吧
    procedure TForm1.BitBtn7Click(Sender: TObject);
    begin
    clientsocket1.Address:='127.0.0.1';
    tempbool:=false;clientsocket1.ClientType:=ctNonBlocking;
    clientsocket1.Open;tempbool:=true;     //tempbool是个全局boolean变量,用来标志是否连接上
    while(tempbool)do
        begin
        application.ProcessMessages;
        end;clientsocket1.Socket.SendText('aaaaaaaa');
    end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
    showmessage(socket.ReceiveText);
    socket.sendtext('aaaa');
    end;procedure TForm1.ClientSocket1Read(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
    showmessage(Socket.ReceiveText);
    end;procedure TForm1.ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
    tempbool:=false;
    end;这样可以在client端是非阻塞模式下同时解决你的两个问题
      

  3.   

    http://topic.csdn.net/u/20080426/16/a6b5f6f6-9298-45c0-8a90-492b9495ce89.html 
    http://topic.csdn.net/u/20080507/11/7adf3e3b-16b9-4c11-a01b-83be267b7c92.html
    两个帖子都是你发的.
    很奇怪你是怎么会同时出现这两个问题的.按理说,当你的ClientSocket1的clienttype为nonblock时才会出现第一个问题,而只有当clienttype为block时才会出现第二个问题.....其实说到底都是网络通信延时造成的.软件工程师往往忽略硬件的具体情况将过程理想化.
      

  4.   

    是呀,两个帖子都是我发的,郁闷,一个socket出现两个这样的问题,让我郁闷死了,仔细看看你的代码..