怎么样才能解决在MEMO中数据的发送和在远程数据的接收

解决方案 »

  1.   

    我刚作的
    服务器和客户端在一起
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ImgList, Menus, ToolWin, ComCtrls, ExtCtrls, StdCtrls, ScktComp;type
      Tw_cww = class(TForm)
        ImageList: TImageList;
        MainMenu1: TMainMenu;
        listen11: TMenuItem;
        AboutSystem11: TMenuItem;
        Listen1: TMenuItem;
        Connect1: TMenuItem;
        Disconnect1: TMenuItem;
        N1: TMenuItem;
        Exit1: TMenuItem;
        ToolBar1: TToolBar;
        StatusBar1: TStatusBar;
        Panel1: TPanel;
        Memo1: TMemo;
        Splitter1: TSplitter;
        Memo2: TMemo;
        Splitter2: TSplitter;
        Panel2: TPanel;
        Panel3: TPanel;
        Memo3: TMemo;
        ClientSocket: TClientSocket;
        ServerSocket: TServerSocket;
        Timer1: TTimer;
        ToolButton_listen: TToolButton;
        ToolButton_connect: TToolButton;
        ToolButton_disconnect: TToolButton;
        ToolButton_aboutsystem: TToolButton;
        ToolButton_exit: TToolButton;
        ToolButton6: TToolButton;
        procedure ToolButton_listenClick(Sender: TObject);
        procedure ToolButton_connectClick(Sender: TObject);
        procedure ToolButton_disconnectClick(Sender: TObject);
        procedure ToolButton_aboutsystemClick(Sender: TObject);
        procedure ToolButton_exitClick(Sender: TObject);
        procedure StatusBar1DrawPanel(StatusBar: TStatusBar;
          Panel: TStatusPanel; const Rect: TRect);
        procedure Memo1KeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure ServerSocketAccept(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure ServerSocketClientDisconnect(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure ServerSocketClientRead(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure ClientSocketConnect(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure ClientSocketDisconnect(Sender: TObject;
          Socket: TCustomWinSocket);
        procedure ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
          ErrorEvent: TErrorEvent; var ErrorCode: Integer);
        procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
        procedure Timer1Timer(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
         isserver:boolean;
         server:string;
         membername:string;
         procedure refresh_memo3;
      public
        { Public declarations }
      end;var
      w_cww: Tw_cww;implementationuses Unit2;{$R *.dfm}procedure tw_cww.refresh_memo3;
    var
    i:integer;
    begin
    w_cww.Memo3.Lines.Clear;
    w_cww.Memo3.Lines.Add(membername+'['+w_cww.ServerSocket.Socket.LocalHost+'](主席)');for i:=0 to w_cww.ServerSocket.Socket.ActiveConnections-1  do
    begin
    w_cww.Memo3.Lines.Add(w_cww.ServerSocket.Socket.Connections[i].RemoteHost+'(成员)');end;
    end;procedure Tw_cww.ToolButton_listenClick(Sender: TObject);
    beginif isserver then
    begin
    w_cww.listen11.Enabled:=true;
    w_cww.ToolButton_listen.Enabled:=true;w_cww.listen11.Checked:=true;
    w_cww.ToolButton_listen.Down:=true;
    w_cww.ToolButton_connect.Enabled:=false;
    w_cww.ToolButton_disconnect.Enabled:=false;w_cww.Connect1.Enabled:=false;
    w_cww.Disconnect1.Enabled:=false;end
    else
    begin
    w_cww.listen11.Enabled:=false;
    w_cww.ToolButton_listen.Enabled:=false;w_cww.ToolButton_connect.Enabled:=true;
    w_cww.ToolButton_disconnect.Enabled:=true;w_cww.Connect1.Enabled:=true;
    w_cww.Disconnect1.Enabled:=true;end;if w_cww.listen11.Checked then
    begin
    showmessage('lasjfdal');
    w_cww.ClientSocket.Active:=false;
    w_cww.ServerSocket.Active:=true;
    w_cww.StatusBar1.Panels[2].Text:='本机是服务器正在监听....';
    end
    else
    begin
    if w_cww.ServerSocket.Active then
    w_cww.ServerSocket.Active:=false;
    w_cww.StatusBar1.Panels[2].Text:='本机是客户进程';
    end;end;procedure Tw_cww.ToolButton_connectClick(Sender: TObject);
    beginif(sender is TMenuItem) then
    begin
    w_cww.Connect1.Checked:=not w_cww.Connect1.Checked;
    w_cww.ToolButton_connect.Down:=w_cww.Connect1.Checked;
    end
    else
    beginw_cww.Connect1.Checked:=w_cww.ToolButton_connect.Down;
    if w_cww.Connect1.Checked then
    begin
    if w_cww.ClientSocket.Active then
    w_cww.ClientSocket.Active:=false;with w_cww.ClientSocket do
    begin
    //host:=server;
    w_cww.ClientSocket.Port:=462110;
    w_cww.ClientSocket.Address:='172.16.92.200';
    try active:=true;
    w_cww.StatusBar1.Panels[2].Text:='本机是客户进程,连接成功';
    except
    showmessage('连接失败');
    end;
    end;
    end;
    end;
    end;procedure Tw_cww.ToolButton_disconnectClick(Sender: TObject);
    beginif (sender is TMenuItem) then
    begin
    w_cww.Disconnect1.Checked:=not w_cww.Disconnect1.Checked;
    w_cww.ToolButton_disconnect.Down:=w_cww.Disconnect1.Checked;
    end
    else
    begin
    w_cww.Disconnect1.Checked:=w_cww.ToolButton_disconnect.Down;if w_cww.Disconnect1.Checked then
    begin
    try  w_cww.ClientSocket.Active:=false;
    w_cww.StatusBar1.Panels[2].Text:='断开连接';except
    showmessage('断开连接失败!');end;end;end; end;procedure Tw_cww.ToolButton_aboutsystemClick(Sender: TObject);
    begin
    aboutbox.ShowModal;
    end;
      

  2.   


    procedure Tw_cww.ToolButton_exitClick(Sender: TObject);
    begin
    w_cww.ClientSocket.Active:=false;
    w_cww.ServerSocket.Active:=false;
    close;
    end;procedure Tw_cww.StatusBar1DrawPanel(StatusBar: TStatusBar;
      Panel: TStatusPanel; const Rect: TRect);
      var
      oldcolor:Tcolor;
      oldstyle:Tbrushstyle;  begin
      if panel.Index=3 then
      begin
      with w_cww.StatusBar1.Canvas do begin
      oldcolor:=font.Color;
      oldstyle:=brush.Style;
      brush.Style:=bsclear;
      font.Color:=clyellow;
      font.Name:='隶书';
      font.Height:=20;
      w_cww.ImageList.draw(w_cww.StatusBar1.Canvas,Rect.left+5,Rect.top+1,8);  font.Color:=clblue;
      TextOut(Rect.Left+40,Rect.Top+5,panel.Text);  font.Color:=clyellow;
      textout(rect.Left+42,rect.Top+7,panel.Text);  font.Color:=oldcolor;
      brush.Style:=oldstyle;  end;
      end;end;procedure Tw_cww.Memo1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
      var
      i:integer;
      begin  if key=vk_return then
      begin  if isserver then
      begin
      for i:=0 to w_cww.ServerSocket.Socket.ActiveConnections-1 do
      begin  //w_cww.ServerSocket.Socket.Connections[i].SendText('讨论'+w_cww.Memo1.Lines[w_cww.Memo1.Lines.Count-1]+'['+membername+']'+w_cww.Memo1.Lines.Text);  w_cww.ServerSocket.Socket.Connections[i].SendText('讨论'+'['+membername+']'+w_cww.Memo1.Lines.Text);  end;  end
      else
      showmessage('client');
     // w_cww.ClientSocket.Socket.SendText('讨论'+w_cww.Memo1.Lines[w_cww.Memo1.Lines.Count-1]+'['+membername+']');
        w_cww.ClientSocket.Socket.SendText('讨论'+'['+membername+']'+w_cww.Memo1.Lines.Text);
      end;end;procedure Tw_cww.ServerSocketAccept(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
    refresh_memo3;
    end;procedure Tw_cww.ServerSocketClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
    refresh_memo3;
    end;procedure Tw_cww.ServerSocketClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
      var
      ss1,ss2:string;
      ll,i   :integer;
      begin
       ss1:=socket.ReceiveText;
       ll:=length(ss1);
       ss2:=copy(ss1,7,ll-6);
       //w_cww.Memo2.Lines.Add(ss2);
       w_cww.Memo2.Lines.Add(ss2);   for i:=0 to w_cww.ServerSocket.Socket.ActiveConnections-1 do begin
      // if (w_cww.ServerSocket.Socket.Connections[i]<>socket) then
       //w_cww.ServerSocket.Socket.Connections[i].SendText('[讨论]'+ss2);
         w_cww.ServerSocket.Socket.Connections[i].SendText('[讨论]'+ss1);
       end;   w_cww.Memo3.Lines.Add(ss1);//jiadeend;procedure Tw_cww.ClientSocketConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    beginw_cww.StatusBar1.Panels[2].Text:='本机是客户进程,已经连接到:'+socket.RemoteHost;
    end;procedure Tw_cww.ClientSocketDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
    w_cww.Memo1.Clear;
    w_cww.Memo2.Clear;
    w_cww.Memo3.Clear;
    end;procedure Tw_cww.ClientSocketError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    begin
    showmessage('服务器连接失败');
    errorcode:=0;
    end;procedure Tw_cww.ClientSocketRead(Sender: TObject;
      Socket: TCustomWinSocket);
      var
      cmd,ss1,ss2,ss3,ss4:string;
      ll,i,k:integer;  begin    ss1:=socket.ReceiveText;
        ll:=length(ss1);
        cmd:=copy(ss1,2,4);
        ss2:=copy(ss1,7,ll-6);
        if cmd='讨论' then
        begin
        w_cww.Memo2.Lines.Add(ss2);
        end
        else if(cmd='刷新') then
        begin
        w_cww.Memo3.Lines.Clear;
        end
        else
        begin    k:=Pos('[信息]',ss2);
        while k>0 do
        begin
         ss3:=copy(ss2,1,k-1);
         ss2:=copy(ss2,k+6,length(ss2)-k-5);
         w_cww.Memo3.Lines.Add(ss3);
         k:=Pos('[信息]',ss2);
        end;
         //w_cww.Memo3.Lines.Add(ss2);
          w_cww.Memo3.Lines.Add(ss1);
        end;
        
    end;procedure Tw_cww.Timer1Timer(Sender: TObject);
    var
    i,k :integer;beginif isserver then
    refresh_memo3;for i:=0 to w_cww.ServerSocket.Socket.ActiveConnections-1 do
    w_cww.ServerSocket.Socket.Connections[i].SendText('[刷新]开始');for k:=1 to w_cww.Memo3.Lines.Count-1 do
    for i:=0 to w_cww.ServerSocket.Socket.ActiveConnections-1 do
    //w_cww.ServerSocket.Socket.Connections[i].SendText('[信息]'+w_cww.Memo3.Lines[k-1]);
    w_cww.ServerSocket.Socket.Connections[i].SendText('[信息]'+w_cww.Memo3.Lines.Text);end;procedure Tw_cww.FormCreate(Sender: TObject);
    {var
       ss:integer;
     p1,p2:string;
     }
    begin  {ss:=paramcount;
       if ss<3 then
        begin
       application.Terminate;
      end
       else
       begin
           p1:=lowercase(paramstr(1));
          p2:=paramstr(2);
          membername:=paramstr(3);
           if p1='server' then
              begin
               isserver:=true;
             end
              else
              begin
               isserver:=false;
               end;
           server:=p2;
        end;   w_cww.Caption:='['+membername+']';
       // isserver:=true;
      w_cww.listen11.OnClick(nil);   }
      isserver:=false;
      membername:='taotao111';
      server:='192.16.92.200';//服务器ipend;end.
      

  3.   

    Delphi的FastNet的DEMO里有个Msg例子,改改就OK