请问
  DELPHI7里面 TCPCLIENT/TCPSERVER控件,在建立连接后如何发消息,用哪个函数,什么格式?  谢谢!

解决方案 »

  1.   

    TCPCLIENT/TCPSERVER是D7新出的控件,D6有吗?
      

  2.   

    呵呵好分数自己要,我自己找到答案拉~~看看DEMO例程,要定义线程CLASS,再用线程发送/接受数据unit Chatmain;interfaceuses
      Classes, QControls, QStdCtrls, QExtCtrls, QButtons, QForms, Sockets;
    type
      TForm1 = class(TForm)
        memRecv: TMemo;
        Panel1: TPanel;
        memSend: TMemo;
        Panel2: TPanel;
        btnSend: TButton;
        Panel3: TPanel;
        Label1: TLabel;
        edtRemoteHost: TEdit;
        Label2: TLabel;
        edtRemotePort: TEdit;
        Label3: TLabel;
        edtLocalPort: TEdit;
        btnActivateServer: TButton;
        TcpClient1: TTcpClient;
        TcpServer1: TTcpServer;
        procedure btnSendClick(Sender: TObject);
        procedure TcpServer1Accept(sender: TObject;
          ClientSocket: TCustomIpClient);
        procedure btnActivateServerClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;  // you must create your own thread to synch
      // writing to a gui component
      TClientDataThread = class(TThread)
      private
      public
        ListBuffer :TStringList;
        TargetList :TStrings;
        procedure synchAddDataToControl;
        constructor Create(CreateSuspended: Boolean);
        procedure Execute; override;
        procedure Terminate;
      end;var
      Form1: TForm1;
      //DataThread: TClientDataThread;implementation{$R *.xfm}//------------- TClientDataThread impl -----------------------------------------
    constructor TClientDataThread.Create(CreateSuspended: Boolean);
    begin
      inherited Create(CreateSuspended);
      FreeOnTerminate := true;
      ListBuffer := TStringList.Create;
    end;procedure TClientDataThread.Terminate;
    begin
      ListBuffer.Free;
      inherited;
    end;procedure TClientDataThread.Execute;
    begin
      Synchronize(synchAddDataToControl);
    end;procedure TClientDataThread.synchAddDataToControl;
    begin
     TargetList.AddStrings(ListBuffer);
    end;
    //------------- end TClientDataThread impl -------------------------------------
    procedure TForm1.btnActivateServerClick(Sender: TObject);
    begin
      TcpServer1.LocalPort := edtLocalPort.Text;
      TcpServer1.Active := True;
    end;         procedure TForm1.btnSendClick(Sender: TObject);
    var
      I: Integer;
    begin
      TcpClient1.RemoteHost := edtRemoteHost.Text;
      TcpClient1.RemotePort := edtRemotePort.Text;
      try
        if TcpClient1.Connect then
          for I := 0 to memSend.Lines.Count - 1 do
          TcpClient1.Sendln(memSend.Lines[I]);
      finally
        TcpClient1.Disconnect;
      end;
    end;procedure TForm1.TcpServer1Accept(sender: TObject;
      ClientSocket: TCustomIpClient);
    var
      s: string;
      DataThread: TClientDataThread;
    begin
      // create thread
      DataThread:= TClientDataThread.Create(true);
      // set the TagetList to the gui list that you
      // with to synch with.
      DataThread.TargetList := memRecv.lines;  // Load the Threads ListBuffer
      DataThread.ListBuffer.Add('*** Connection Accepted ***');
      DataThread.ListBuffer.Add('Remote Host: ' + ClientSocket.LookupHostName(ClientSocket.RemoteHost) +
       ' (' + ClientSocket.RemoteHost + ')');
      DataThread.ListBuffer.Add('===== Begin message =====');
      s := ClientSocket.Receiveln;
      while s <> '' do
      begin
        DataThread.ListBuffer.Add(s);
        s := ClientSocket.Receiveln;
      end;
      DataThread.ListBuffer.Add('===== End of message =====');  // Call Resume which will execute and synch the
      // ListBuffer with the TargetList
      DataThread.Resume;end;end.
      

  3.   

    自己打自己嘴巴~~~函数 TCPSERVER.RECVICELN还是用不了,3天都找不到答案,好笨呕。
    最后还是用SERVERSOCKET解决了。