Minggu, 16 November 2008

Pesan Sederhana Client-Server

  • Project Aplikasi Pesan Sederhana kali ini dengan menggunakan clientsocket, serversocket dan TCPserver/client Component di Tab internet Delphi. Di delphi 7 untuk memanggil komponennya (client/server socket) lakukanlah :
    Klik menu bar Component>Install Packages; pada Tab Packages dari Project Option pilih Add,look in drive:\Program File>Borland>Delphi7>bin kemudian pilih dclsockets70.bpl; klik Open sehingga muncul di List design Packages-Borland socket component (kondisi terpilih) kemudian OK. Lihat di Tab Internet.
  • Buatlah aplikasi menu utama pada form1 (gambar1) , selanjutnya :
    Form2 (gb2) untuk aplikasi pesan server (clientsocket komponen di Tab Internet);
    Form3 (gb3)untuk aplikasi pesan client (serversocket komponen di Tab Internet);
    Form4 (gb4)untuk aplikasi port (Tcpserver & Tcpclient komponen di Tab Internet);
    gbr.2 gbr.3










gbr.1

    gbr.4

    Tambahkan Main Menu komponen (di Tab Standard) pada menu utama (form1).

    Ketiga Form lainnya di link dari menu utama (form1). Untuk mencoba aplikasi yang telah dibuat pada PC yang sama digunakan alamat Local Host : 127.0.0.1; apabila dicoba pada jaringan LAN untuk 2 PC dapat digunakan alamat : 192.168.0.1 (server) dan 192.168.0.2 (client).

      Untuk List Program sbb:
      1. Menu Utama (Form1) :
      .........................
      implementation
      uses MMSystem, Unit2, Unit3, Unit4;


      {$R *.dfm}

      procedure TForm1.PRO1Click(Sender: TObject);
      begin
      close;
      end;

      procedure TForm1.SERVER1Click(Sender: TObject);
      begin
      form2.show;
      SNDPlaySound('ungu.wav',SND_ASYNC OR SND_FILENAME);
      end;

      procedure TForm1.CLIENT1Click(Sender: TObject);
      begin
      form3.show;
      end;

      procedure TForm1.CPserverclient1Click(Sender: TObject);
      begin
      form4.show;
      end;
      end.

          2. Form2
          ...............................
          implementation

          {$R *.dfm}

          procedure TForm2.FormCreate(Sender: TObject);
          begin
          ServerSocket1.Port:=50;
          end;

          procedure TForm2.BitBtn1Click(Sender: TObject);
          begin
          If (serversocket1.socket.ActiveConnections > 0) then
          serversocket1.socket.connections[0].SendText(Edit1.Text);

          end;

          procedure TForm2.ServerSocket1Accept(Sender: TObject;
          Socket: TCustomWinSocket);
          begin
          Memo2.Lines.Add('Accept dari'+Socket.RemoteHost);
          end;

          procedure TForm2.ServerSocket1Listen(Sender: TObject;
          Socket: TCustomWinSocket);
          begin
          Memo2.Lines.Add('Listen di'+Socket.LocalHost);
          end;

          procedure TForm2.ServerSocket1ClientError(Sender: TObject;
          Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
          var ErrorCode: Integer);
          begin
          Memo2.Lines.Add('Error'+IntToStr(ErrorCode));
          end;

          procedure TForm2.ServerSocket1ClientRead(Sender: TObject;
          Socket: TCustomWinSocket);
          begin
          Memo2.lines.Add('ClientRead"'+Socket.ReceiveText+'"');
          end;

          procedure TForm2.ServerSocket1ClientConnect(Sender: TObject;
          Socket: TCustomWinSocket);
          begin
          Memo1.Lines.Add('Connected:'+socket.RemoteHost+'('+socket.RemoteAddress+')');
          end;

          procedure TForm2.ServerSocket1ClientDisconnect(Sender: TObject;
          Socket: TCustomWinSocket);
          begin
          Memo1.Lines.Add('DisConnected:'+socket.RemoteHost+'('+socket.RemoteAddress+')');
          end;

          end.

          3. Form3
          ..........................
          implementation

          {$R *.dfm}

          procedure TForm3.BitBtn1Click(Sender: TObject);
          begin
          If(clientsocket1.socket.connected) then
          clientsocket1.socket.sendText(Edit2.Text);

          end;

          procedure TForm3.ClientSocket1Connect(Sender: TObject;
          Socket: TCustomWinSocket);
          begin
          Memo1.Lines.Add('Connect ke'+Socket.RemoteHost);
          end;

          procedure TForm3.ClientSocket1Error(Sender: TObject;
          Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
          var ErrorCode: Integer);
          begin
          Memo1.Lines.Add('Error'+intToStr(Errorcode));
          end;

          procedure TForm3.ClientSocket1Read(Sender: TObject;
          Socket: TCustomWinSocket);
          begin
          Memo1.Lines.Add('Read"'+Socket.ReceiveText+'"');
          end;

          procedure TForm3.CheckBox1Click(Sender: TObject);
          begin
          if not clientsocket1.active then
          clientsocket1.address:=edit1.Text;
          clientsocket1.active:=checkBox1.checked;

          end;

          end.

          4. Form4

          unit Unit4;

          interface

          uses
          Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
          Dialogs, StdCtrls, Buttons, Sockets, ExtCtrls;

          type
          TForm4 = class(TForm)
          Panel1: TPanel;
          TcpServer1: TTcpServer;
          TcpClient1: TTcpClient;
          Edit1: TEdit;
          Label1: TLabel;
          Edit2: TEdit;
          Label2: TLabel;
          Edit3: TEdit;
          Label3: TLabel;
          BitBtn1: TBitBtn;
          memreceive: TMemo;
          Label4: TLabel;
          Label5: TLabel;
          Panel2: TPanel;
          BitBtn2: TBitBtn;
          memsend: TMemo;
          BitBtn3: TBitBtn;
          procedure BitBtn1Click(Sender: TObject);
          procedure BitBtn2Click(Sender: TObject);
          procedure TcpServer1Accept(Sender: TObject;
          ClientSocket: TCustomIpClient);
          procedure FormCreate(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
          Form4: TForm4;
          //DataThread: TClientDataThread;
          implementation

          {$R *.dfm}
          //------------- 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 TForm4.BitBtn1Click(Sender: TObject);
          begin
          TcpServer1.LocalPort := edit3.Text;
          TcpServer1.Active := True;

          end;

          procedure TForm4.BitBtn2Click(Sender: TObject);
          var
          I: Integer;

          begin
          TcpClient1.RemoteHost := edit1.Text;
          TcpClient1.RemotePort := edit2.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 TForm4.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 := memreceive.lines;

          // Load the Threads ListBuffer
          DataThread.ListBuffer.Add('*** Koneksi diterima ***');
          DataThread.ListBuffer.Add('Remote Host: ' + ClientSocket.LookupHostName(ClientSocket.RemoteHost) +
          ' (' + ClientSocket.RemoteHost + ')');
          DataThread.ListBuffer.Add('===== Awal PesaN =====');
          s := ClientSocket.Receiveln;
          while s <> '' do
          begin
          DataThread.ListBuffer.Add(s);
          s := ClientSocket.Receiveln;
          end;
          DataThread.ListBuffer.Add('===== Akhir Pesan =====');

          // Call Resume which will execute and synch the
          // ListBuffer with the TargetList
          DataThread.Resume;

          end;
          end.


          Jangan lupa untuk properties dan eventnya :




            Let's go to RUN program..........











































































































                                          Tidak ada komentar: