- 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:
.........................
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:
Posting Komentar