<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Males Koding</title>
	<atom:link href="http://maleskoding.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://maleskoding.wordpress.com</link>
	<description>Blog yang isinya ternyata banyak kodingannya</description>
	<lastBuildDate>Tue, 23 Jun 2009 04:06:50 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>id</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image>
		<url>http://www.gravatar.com/blavatar/702e2df981533e6dde251257b899e9e0?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Males Koding</title>
		<link>http://maleskoding.wordpress.com</link>
	</image>
			<item>
		<title>Membuat Compiler/Interpreter Bahasa Sendiri</title>
		<link>http://maleskoding.wordpress.com/2009/06/23/membuat-compilerinterpreter-bahasa-sendiri/</link>
		<comments>http://maleskoding.wordpress.com/2009/06/23/membuat-compilerinterpreter-bahasa-sendiri/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 04:06:50 +0000</pubDate>
		<dc:creator>petra</dc:creator>
				<category><![CDATA[Miscelleneaous]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[abstract syntax tree]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[interpreter]]></category>
		<category><![CDATA[programming language]]></category>

		<guid isPermaLink="false">http://maleskoding.wordpress.com/?p=488</guid>
		<description><![CDATA[Seringkali di sebuah domain persoalan kita membutuhkan sebuah perangkat pemrograman untuk menyelesaikan masalah. Berbeda dengan general purpose programming language seperti Java, C, C++, dan lain-lain, ada beberapa bahasa pemrograman yang diciptakan hanya untuk dipakai pada permasalahan tertentu. Bahasa seperti ini disebut DSL atau Domain specific language. Untuk membuat bahasa-bahasa baru seperti ini dibutuhkan kemampuan untuk [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=488&subd=maleskoding&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Seringkali di sebuah domain persoalan kita membutuhkan sebuah perangkat pemrograman untuk menyelesaikan masalah. Berbeda dengan <em>general purpose programming language </em>seperti Java, C, C++, dan lain-lain, ada beberapa bahasa pemrograman yang diciptakan hanya untuk dipakai pada permasalahan tertentu. Bahasa seperti ini disebut DSL atau <em>Domain specific language</em>. Untuk membuat bahasa-bahasa baru seperti ini dibutuhkan kemampuan untuk membuat <em>compiler </em>atau <em>interpreter</em> bahasa tersebut.</p>
<p><a href="http://blog.compactbyte.com/">Pak Joe</a> baru merilis sebuah tutorial sederhana bagaimana membuat <em>compiler </em>atau <em>interpreter </em>untuk sebuah bahasa pemrograman. Tutorial bisa dibaca <a href="http://yohan.es/compiler/">di sini</a>. Sejauh yang saya baca, tutorialnya cukup sederhana tapi lumayan komprehensif: mengenalkan kita kepada konsep <em>parsing, abstract syntax tree, assembly, </em>dan lain-lain.</p>
<p>Well, kebetulan saya gak sempat ngambil mata kuliah Teknik Kompilasi, tapi menurut saya ini cukup berguna buat pengenalan awal.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maleskoding.wordpress.com/488/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maleskoding.wordpress.com/488/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maleskoding.wordpress.com/488/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maleskoding.wordpress.com/488/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maleskoding.wordpress.com/488/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maleskoding.wordpress.com/488/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maleskoding.wordpress.com/488/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maleskoding.wordpress.com/488/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maleskoding.wordpress.com/488/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maleskoding.wordpress.com/488/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=488&subd=maleskoding&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://maleskoding.wordpress.com/2009/06/23/membuat-compilerinterpreter-bahasa-sendiri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74769ceff9148ba0181933857f966fee?s=96&#38;d=" medium="image">
			<media:title type="html">petra</media:title>
		</media:content>
	</item>
		<item>
		<title>Persistence di Java EE</title>
		<link>http://maleskoding.wordpress.com/2009/06/13/persistence-di-java-ee/</link>
		<comments>http://maleskoding.wordpress.com/2009/06/13/persistence-di-java-ee/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 09:51:47 +0000</pubDate>
		<dc:creator>petra</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Medium]]></category>
		<category><![CDATA[Web Programming]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[object]]></category>
		<category><![CDATA[persistence]]></category>
		<category><![CDATA[relational database]]></category>

		<guid isPermaLink="false">http://maleskoding.wordpress.com/?p=479</guid>
		<description><![CDATA[Persistence adalah sebuah fitur yang mampu melakukan mapping object ke relasional. Dengan adanya fitur ini maka kita bisa dengan mudah melakukan pengembangan objek dengan menggunakan basisdata tanpa harus mengkodekan koneksi manual ke database. Kemaren gw baru nyobain fitur persistence itu untuk Java EE dengan menggunakan Netbeans dan MySQL.
Ceritanya gw bikin sebuah table namanya products


CREATE TABLE [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=479&subd=maleskoding&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Persistence adalah sebuah fitur yang mampu melakukan mapping object ke relasional. Dengan adanya fitur ini maka kita bisa dengan mudah melakukan pengembangan objek dengan menggunakan basisdata tanpa harus mengkodekan koneksi manual ke database. Kemaren gw baru nyobain fitur persistence itu untuk <a href="http://java.sun.com/javaee/">Java EE</a> dengan menggunakan <a href="http://www.netbeans.org">Netbeans</a> dan <a href="http://www.mysql.com">MySQL</a>.</p>
<p>Ceritanya gw bikin sebuah table namanya products</p>
<pre name="code" class="sql">

CREATE TABLE `product` (
`ID` VARCHAR( 8 ) NOT NULL ,
`Name` TEXT NOT NULL ,
`Price` INT NOT NULL ,
`Quantity` INT NOT NULL ,
PRIMARY KEY ( `ID` )
) ENGINE = MYISAM ;
</pre>
<p>Untuk melakukan manajemennya bisa dilihat di <a href="http://maleskoding.wordpress.com/2009/04/26/manajemen-mysql-dengan-netbeans/">sini</a>.<br />
Nantinya akan keluar<br />
<a href="http://maleskoding.files.wordpress.com/2009/06/mysql1.png"><img class="aligncenter size-full wp-image-482" title="mysql1" src="http://maleskoding.files.wordpress.com/2009/06/mysql1.png?w=333&#038;h=349" alt="mysql1" width="333" height="349" /></a></p>
<p>Setelah itu kita bikin aplikasi berbasis Java EE, entah itu Enterprise app atau sekadar Web app.<br />
Nah kita langsung coba bikin Class dari database.</p>
<p><a href="http://maleskoding.files.wordpress.com/2009/06/mysql2.png"><img class="aligncenter size-full wp-image-483" title="mysql2" src="http://maleskoding.files.wordpress.com/2009/06/mysql2.png?w=468&#038;h=416" alt="mysql2" width="468" height="416" /></a></p>
<p>Setelah itu tinggal ikutin langkah-langkah aja.</p>
<p><a href="http://maleskoding.files.wordpress.com/2009/06/mysql3.png"><img class="aligncenter size-full wp-image-484" title="mysql3" src="http://maleskoding.files.wordpress.com/2009/06/mysql3.png?w=468&#038;h=314" alt="mysql3" width="468" height="314" /></a></p>
<p>Kita pilih data source yang diperlukan&#8230;. Terus abis itu kita pilih table-table yang dibutuhkan juga&#8230; Dan nanti masing-masing table akan menjadi sebuah<em> class.</em></p>
<p><a href="http://maleskoding.files.wordpress.com/2009/06/mysql4.png"><img class="aligncenter size-full wp-image-485" title="mysql4" src="http://maleskoding.files.wordpress.com/2009/06/mysql4.png?w=468&#038;h=410" alt="mysql4" width="468" height="410" /></a></p>
<p>Nah nantinya kita akan punya sebuah<em> class</em> Product. (Nama product terpaksa direname sendiri karena pada table biasanya menggunakan nama <em>plural</em> sedangkan nama class biasanya <em>singular</em>)</p>
<pre name="code" class="java">

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package model;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 *
 * @author Petra Barus
 */
@Entity
@Table(name = &quot;products&quot;)
@NamedQueries({@NamedQuery(name = &quot;Product.findAll&quot;, query = &quot;SELECT p FROM Product p&quot;), @NamedQuery(name = &quot;Product.findById&quot;, query = &quot;SELECT p FROM Product p WHERE p.id = :id&quot;), @NamedQuery(name = &quot;Product.findByPrice&quot;, query = &quot;SELECT p FROM Product p WHERE p.price = :price&quot;), @NamedQuery(name = &quot;Product.findByQuantity&quot;, query = &quot;SELECT p FROM Product p WHERE p.quantity = :quantity&quot;)})
public class Product implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = &quot;ID&quot;)
    private String id;
    @Basic(optional = false)
    @Lob
    @Column(name = &quot;Name&quot;)
    private String name;
    @Basic(optional = false)
    @Column(name = &quot;Price&quot;)
    private int price;
    @Basic(optional = false)
    @Column(name = &quot;Quantity&quot;)
    private int quantity;

    public Product() {
    }

    public Product(String id) {
        this.id = id;
    }

    public Product(String id, String name, int price, int quantity) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.quantity = quantity;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getQuantity() {
        return quantity;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won&#039;t work in the case the id fields are not set
        if (!(object instanceof Product)) {
            return false;
        }
        Product other = (Product) object;
        if ((this.id == null &amp;&amp; other.id != null) || (this.id != null &amp;&amp; !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return &quot;model.Product[id=&quot; + id + &quot;]&quot;;
    }

}
</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maleskoding.wordpress.com/479/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maleskoding.wordpress.com/479/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maleskoding.wordpress.com/479/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maleskoding.wordpress.com/479/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maleskoding.wordpress.com/479/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maleskoding.wordpress.com/479/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maleskoding.wordpress.com/479/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maleskoding.wordpress.com/479/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maleskoding.wordpress.com/479/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maleskoding.wordpress.com/479/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=479&subd=maleskoding&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://maleskoding.wordpress.com/2009/06/13/persistence-di-java-ee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74769ceff9148ba0181933857f966fee?s=96&#38;d=" medium="image">
			<media:title type="html">petra</media:title>
		</media:content>

		<media:content url="http://maleskoding.files.wordpress.com/2009/06/mysql1.png" medium="image">
			<media:title type="html">mysql1</media:title>
		</media:content>

		<media:content url="http://maleskoding.files.wordpress.com/2009/06/mysql2.png" medium="image">
			<media:title type="html">mysql2</media:title>
		</media:content>

		<media:content url="http://maleskoding.files.wordpress.com/2009/06/mysql3.png" medium="image">
			<media:title type="html">mysql3</media:title>
		</media:content>

		<media:content url="http://maleskoding.files.wordpress.com/2009/06/mysql4.png" medium="image">
			<media:title type="html">mysql4</media:title>
		</media:content>
	</item>
		<item>
		<title>Happy Birthday, PHP!</title>
		<link>http://maleskoding.wordpress.com/2009/06/09/happy-birthday-php/</link>
		<comments>http://maleskoding.wordpress.com/2009/06/09/happy-birthday-php/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 01:25:42 +0000</pubDate>
		<dc:creator>petra</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://maleskoding.wordpress.com/?p=477</guid>
		<description><![CDATA[Ngeliat status di page PHP di Facebook, hari ini PHP berulang tahun ke 14. Sebenernya ultahnya tanggal 8 Juni, sekarang udah 9 Juni, tapi mari kita hormati waktu di benua bagian barat sana. Hehehe.

PHP adalah bahasa pemrograman web yang paling populer di dunia. At least itu menurut gw. Dan PHP adalah bahasa pemrograman web yang [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=477&subd=maleskoding&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Ngeliat status di <a href="http://www.facebook.com/pages/PHP/6358087478">page PHP di Facebook</a>, hari ini <a href="http://www.php.net">PHP</a> berulang tahun ke 14. Sebenernya ultahnya tanggal 8 Juni, sekarang udah 9 Juni, tapi mari kita hormati waktu di benua bagian barat sana. Hehehe.</p>
<p style="text-align:center;"><img class="aligncenter" src="http://maleskoding.files.wordpress.com/2009/06/php.png" alt="" /></p>
<p>PHP adalah bahasa pemrograman web yang paling populer di dunia. At least itu menurut gw. Dan PHP adalah bahasa pemrograman web yang pertama kali gw kenal.</p>
<p>Gimana sih gw bisa kenal sama PHP?</p>
<p>Pertama kali gw kenal PHP itu di bangku SMA. Yup, seperti yang gw bilang di <a href="http://van-odin.net/blog/2009/05/30/menggambar/">post ini</a>, masa SMA adalah saat di mana gw mulai menekuni ilmu komputer. Sebelumnya gw emang pernah kenal Pascal di SD, QBasic, x86 assembly, Visual Basic, dan Java di bangku SMP. Tapi anehnya gw gak pernah setertarik itu sebelum di SMA.</p>
<p><span id="more-477"></span></p>
<p>Di SMA gw diminta untuk ikut-ikutan ngurusin web dan forum <a href="http://www.smun8.net">SMA gw</a>. Gw inget banget pas itu masih pake <a href="http://www.postnuke.com/">PHP PostNuke</a> (<em>entah versi berapa</em>) dan <a href="http://www.phpbb.com">phpBB</a> (masih versi 2 pas itu). Pertama-tama belajarnya masih belajar cara make CMSnya itu. Abis itu baru nyoba-nyoba belajar ngedeploy CMS sendiri. Untungnya dulu masih ada namanya <a href="http://sourceforge.net/projects/phptriad">PHPTriad</a> yang sekarang sudah tergantikan dengan <a href="http://www.apachefriends.org">XAMPP</a>, hehehe. Dan akhirnya terjun ke dunia <em>web development</em>. Baru kenal arti <em>exploit</em>, <em>SQL Injection</em>, sama <em>Cross Site Scripting</em>. Dan sebelum sempat ngebantu guru SMA buat migrasi PHP PostNukenya ke <a href="http://mambo-foundation.org/">Mambo</a> dan akhirnya ke <a href="http://www.joomla.org">Joomla</a> yang lebih bagus dan <em>secure</em>.</p>
<p>Pada saat kuliah udah mulai iseng-iseng nyoba ngoprek-ngoprek CMS yang ada di dunia ini mulai dari Joomla, <a href="http://drupal.org/">Drupal</a>, dan <a href="http://www.wordpress.org">WordPress</a>. Kemudian beranjak setelah itu make PHP Framework&#8230;.. Err&#8230;. PHP Framework yang pernah dioprek juga terbatas cuman <a href="http://www.cakephp.org">CakePHP</a>, <a href="http://www.codeigniter.com">CodeIgniter</a>, dan terakhir <em>my beloved one</em> <a href="http://www.kohanaphp.com">KohanaPHP</a>. Kalau di bangku kuliah sendiri baru diajarin yang namanya PHP itu pas semester 2, Pemrograman Web tapi itu cuman 2 pertemuan doang. Lengkapnya diajarin di semester 6, mata kuliah bernama Pemrograman Internet di mana juga cuman diajarin sekilas doang. Berhubung tugas-tugas ProgIn itu juga lumayan berat dan susah, jadinya lumayan terasah kemampuan ngoding PHP.</p>
<p>Overall, PHP itu bahasa favorit gw. Even gw udah pernah nyoba <a href="http://www.asp.net/">ASP</a>, <a href="http://www.asp.net/">ASPX</a>, dan <a href="http://java.sun.com/products/jsp/">JSP</a> tapi gw masih lebih prefer PHP. Di antara semuanya PHP itu gw nilai yang paling ringkas, lengkap, dan enak digunakan. Tapi meski belakangan banyak orang udah mulai ke bahasa <a href="http://www.ruby-lang.org/en/">Ruby</a> yang lebih ringkas dan natural dengan framework <a href="http://rubyonrails.org/">Rails</a>nya yang bener-bener dewa lah gw rasa (<em>masih belum ada yang bisa ngalahin kayaknya</em>), gw rasa PHP masih akan banyak dipakai untuk waktu yang sangat lama karena makin lama fitur-fiturnya juga makin bertambah dan makin menarik untuk dieksplorasi.</p>
<p>Bravo, PHP! Happy Birthday! Tak sabar menanti PHP 6! ^_^</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maleskoding.wordpress.com/477/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maleskoding.wordpress.com/477/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maleskoding.wordpress.com/477/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maleskoding.wordpress.com/477/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maleskoding.wordpress.com/477/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maleskoding.wordpress.com/477/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maleskoding.wordpress.com/477/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maleskoding.wordpress.com/477/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maleskoding.wordpress.com/477/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maleskoding.wordpress.com/477/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=477&subd=maleskoding&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://maleskoding.wordpress.com/2009/06/09/happy-birthday-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74769ceff9148ba0181933857f966fee?s=96&#38;d=" medium="image">
			<media:title type="html">petra</media:title>
		</media:content>

		<media:content url="http://maleskoding.files.wordpress.com/2009/06/php.png" medium="image" />
	</item>
		<item>
		<title>Contoh dialog SMTP dan POP</title>
		<link>http://maleskoding.wordpress.com/2009/05/13/contoh-dialog-smtp-dan-pop/</link>
		<comments>http://maleskoding.wordpress.com/2009/05/13/contoh-dialog-smtp-dan-pop/#comments</comments>
		<pubDate>Wed, 13 May 2009 14:04:25 +0000</pubDate>
		<dc:creator>petra</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://maleskoding.wordpress.com/?p=433</guid>
		<description><![CDATA[Berikut contoh dialog antara server dan client pada SMTP. C adalah Client, S adalah Server.


S: 220 smtp.example.com ESMTP Postfix
C: HELO relay.example.org
S: 250 Hello relay.example.org, I am glad to meet you
C: MAIL FROM:
S: 250 Ok
C: RCPT TO:
S: 250 Ok
C: RCPT TO:
S: 250 Ok
C: DATA
S: 354 End data with .
C: From: "Bob Example"
C: To: Alice Example
C: Cc: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=433&subd=maleskoding&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Berikut contoh dialog antara server dan client pada SMTP. C adalah Client, S adalah Server.<br />
<span id="more-433"></span></p>
<pre>
S: 220 smtp.example.com ESMTP Postfix
C: HELO relay.example.org
S: 250 Hello relay.example.org, I am glad to meet you
C: MAIL FROM:
S: 250 Ok
C: RCPT TO:
S: 250 Ok
C: RCPT TO:
S: 250 Ok
C: DATA
S: 354 End data with .
C: From: "Bob Example"
C: To: Alice Example
C: Cc: theboss@example.com
C: Date: Tue, 15 Jan 2008 16:02:43 -0500
C: Subject: Test message
C:
C: Hello Alice.
C: This is a test message with 5 header fields and 4 lines in the message body.
C: Your friend,
C: Bob
C: .
S: 250 Ok: queued as 12345
C: QUIT
S: 221 Bye
</pre>
<p>Berikut adalah contoh yang POP3</p>
<pre>
S:
C:
S:    +OK POP3 server ready
C:    APOP mrose c4c9334bac560ecc979e58001b3e22fb
S:    +OK mrose's maildrop has 2 messages (320 octets)
C:    STAT
S:    +OK 2 320
C:    LIST
S:    +OK 2 messages (320 octets)
S:    1 120
S:    2 200
S:    .
C:    RETR 1
S:    +OK 120 octets
S:
S:    .
C:    DELE 1
S:    +OK message 1 deleted
C:    RETR 2
S:    +OK 200 octets
S:
C:    QUIT
S:    +OK dewey POP3 server signing off (maildrop empty)
C:
S:
</blockquote>

Untuk implementasi tubes progin, protokol di atas disederhanakan saja.
Misalnya untuk sending
<pre>
C: HELO
S: OK
C: MAIL
S: OK
C: SNDR user1 password
S: OK
C: RCPT user2
S: OK
C: DATA
subject: hello.
content: .
hello world!.
.
S: OK
C: QUIT
S: BYE
</pre>
<p>Catatan untuk di atas, mengakhiri bagian data cukup akhiri dengan karakter '\n' dan karakter '.' yang berurutan.</p>
<p>Untuk yang fetching misalnya</p>
<pre>
C: HELO
S: OK
C: FTCH
S: OK
C: LGIN user1 password
S: OK
C: LIST
S: 2
MAIL 1
To: user1.
From: user2.
Time: 09-03-09
Subject: Hello World.
Hello World.
.
MAIL 2
To: user1
From: user3
Time: 11-05-09
Subject: Hello Lagi.
Hello World Lagi.
.
C: QUIT
S: BYE
</pre>
<p>ini contoh sederhana aja.... tapi ada beberapa (sedikit) kasus yang harus diperhatikan.....</p>
<p>Implementasinya tinggal gabungin yang ada di <a href="http://maleskoding.wordpress.com/2009/05/02/java-socket-programming-server-tebak-tebakan/">Server Tebak-Tebakan</a> ^_^</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maleskoding.wordpress.com/433/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maleskoding.wordpress.com/433/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maleskoding.wordpress.com/433/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maleskoding.wordpress.com/433/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maleskoding.wordpress.com/433/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maleskoding.wordpress.com/433/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maleskoding.wordpress.com/433/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maleskoding.wordpress.com/433/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maleskoding.wordpress.com/433/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maleskoding.wordpress.com/433/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=433&subd=maleskoding&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://maleskoding.wordpress.com/2009/05/13/contoh-dialog-smtp-dan-pop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74769ceff9148ba0181933857f966fee?s=96&#38;d=" medium="image">
			<media:title type="html">petra</media:title>
		</media:content>
	</item>
		<item>
		<title>Fitur Facebook yang gak guna ituh..</title>
		<link>http://maleskoding.wordpress.com/2009/05/12/fitur-facebook-yang-gak-guna-ituh/</link>
		<comments>http://maleskoding.wordpress.com/2009/05/12/fitur-facebook-yang-gak-guna-ituh/#comments</comments>
		<pubDate>Tue, 12 May 2009 17:08:07 +0000</pubDate>
		<dc:creator>petra</dc:creator>
				<category><![CDATA[Miscelleneaous]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[jokes]]></category>

		<guid isPermaLink="false">http://maleskoding.wordpress.com/?p=429</guid>
		<description><![CDATA[Pertama-tama gw gak habis pikir kenapa sih Facebook ngasih fitur buat ngasi liat wall orang ke orang lain&#8230;.
Setelah beberapa bulan, Facebook menambahkan fitur baru&#8230;. Yakni ngomentarin wall orang ke orang lain&#8230;. Fitur yang sama gak kalah pentingnya sama fitur di atas, menurut gw&#8230;.
Dan pada akhirnya gw menyesali kebodohan gw&#8230;. Karena saat ini gw tau gunanya [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=429&subd=maleskoding&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Pertama-tama gw gak habis pikir kenapa sih <a href="http://www.facebook.com">Facebook</a> ngasih fitur buat ngasi liat wall orang ke orang lain&#8230;.</p>
<p>Setelah beberapa bulan, <a href="http://www.facebook.com">Facebook</a> menambahkan fitur baru&#8230;. Yakni ngomentarin wall orang ke orang lain&#8230;. Fitur yang sama gak kalah pentingnya sama fitur di atas, menurut gw&#8230;.</p>
<p>Dan pada akhirnya gw menyesali kebodohan gw&#8230;. Karena saat ini gw tau gunanya buat apa&#8230;.</p>
<p><img src="http://maleskoding.files.wordpress.com/2009/05/test2.png" alt="Haha" /></p>
<p><a href="http://www.facebook.com">Facebook</a> is the best lah!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maleskoding.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maleskoding.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maleskoding.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maleskoding.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maleskoding.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maleskoding.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maleskoding.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maleskoding.wordpress.com/429/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maleskoding.wordpress.com/429/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maleskoding.wordpress.com/429/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=429&subd=maleskoding&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://maleskoding.wordpress.com/2009/05/12/fitur-facebook-yang-gak-guna-ituh/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74769ceff9148ba0181933857f966fee?s=96&#38;d=" medium="image">
			<media:title type="html">petra</media:title>
		</media:content>

		<media:content url="http://maleskoding.files.wordpress.com/2009/05/test2.png" medium="image">
			<media:title type="html">Haha</media:title>
		</media:content>
	</item>
		<item>
		<title>Di mana menaruh session?</title>
		<link>http://maleskoding.wordpress.com/2009/05/10/di-mana-menaruh-session/</link>
		<comments>http://maleskoding.wordpress.com/2009/05/10/di-mana-menaruh-session/#comments</comments>
		<pubDate>Sun, 10 May 2009 00:39:03 +0000</pubDate>
		<dc:creator>petra</dc:creator>
				<category><![CDATA[Lecture]]></category>
		<category><![CDATA[Medium]]></category>
		<category><![CDATA[Network Programming]]></category>
		<category><![CDATA[Web Programming]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[protocol]]></category>
		<category><![CDATA[session]]></category>
		<category><![CDATA[socket programming]]></category>

		<guid isPermaLink="false">http://maleskoding.wordpress.com/?p=416</guid>
		<description><![CDATA[Session adalah sebuah pertukaran informasi semi permanen antara dua buah device. Dengan menggunakan session sebuah device terus dapat mengenali sebuah device identik dalam jangka waktu yang tidak terlalu lama dan dapat menyimpan informasi mengenai komunikasi antara kedua device tersebut. Session ini bersifat stateful (meski mungkin ada yang tidak, tapi gw pribadi gak tau contohnya). Sebuah [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=416&subd=maleskoding&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><em>Session</em> adalah sebuah pertukaran informasi semi permanen antara dua buah <em>device</em>. Dengan menggunakan <em>session</em> sebuah <em>device</em> terus dapat mengenali sebuah <em>device </em>identik dalam jangka waktu yang tidak terlalu lama dan dapat menyimpan informasi mengenai komunikasi antara kedua <em>device </em>tersebut. <em>Session</em> ini bersifat <em>stateful</em> (meski mungkin ada yang tidak, tapi gw pribadi gak tau contohnya). Sebuah <em>device</em> dapat mengingat apa sih yang terjadi antara <em>device </em>tersebut dengan sebuah <em>device </em>yang lain selama komunikasi berlangsung.</p>
<p><a href="http://maleskoding.files.wordpress.com/2009/05/3wayhandshake1.jpg"><img class="alignright size-full wp-image-421" title="3wayhandshake" src="http://maleskoding.files.wordpress.com/2009/05/3wayhandshake1.jpg?w=204&#038;h=234" alt="3wayhandshake" width="204" height="234" /></a>Contoh <em>session</em> adalah TCP <em>session</em>. Pada awal sebuah komunikasi TCP, kedua <em>device</em> akan membuka sebuah <em>socket</em> untuk berkomunikasi. Sebuah TCP <em>session</em> adalah dari awal sebuah <em>device</em> mengirimkan SYN sampai dengan pesan ACK penutupan koneksi tersebut.</p>
<p>Di dalam desain protokol, kita perlu mengetahui <em>state</em> sebuah <em>device</em>. Dengan adanya <em>session</em>, <em>state</em> tersebut dengan mudahnya diketahui selama kedua <em>device</em> masih berada dalam <em>session</em>. Pada contoh di <em>post-post </em>sebelumnya, awal sebuah <em>session</em> dimulai ketika sebuah <em>socket</em> selesai melakukan <em>blocking</em> dan menerima koneksi sampai <em>socket</em> ditutup. Selama sesi ini kedua <em>device</em> bertukar pesan-pesan. Pesan-pesan ini nantinya akan diparsing oleh kedua <em>device</em> berdasarkan protokol yang sudah ditetapkan oleh si desainer protokol.</p>
<p>Akan tetapi ada beberapa protokol yang sifatnya <em>stateless</em>, seperti protokol HTTP. Pada protokol ini, <em>client</em> hanya mengirim sebuah HTTP request dan <em>server</em> mengembalikan sebuah HTTP response. Hal ini dirasa cukup karena pada awalnya HTTP mungkin digunakan untuk <em>static web</em>. Pada penggunaan selanjutnya ada kebutuhan untuk membuat sebuah <em>web</em> sedikit lebih statis. Kemudian diciptakanlah sebuah mekanisme <em>session</em> di atas protokol HTTP.</p>
<p>Pada mekanisme ini, saat <em>server</em> menerima <em>request </em>dari sebuah <em>client</em>, <em>server</em> tersebut akan memeriksa apakah <em>client</em> tersebut sudah berada dalam sebuah <em>session</em> atau belum. Jika belum maka <em>server</em> membangkitkan sebuah hash dan menyimpannya pada basis data. Setelah itu <em>server</em> akan mengembalikan <em>response </em>yang disertai dengan <em>hash</em> tersebut pada <em>header </em>dari <em>response</em>. Selanjutnya si <em>client</em> diwajibkan untuk menyertakan <em>hash </em>tersebut pada <em>header</em> dari <em>request</em> yang dikirim kepada si <em>server</em>. Dengan demikian <em>server</em> dapat mengetahui apakah si <em>client</em> sudah berada pada sebuah <em>session </em>atau belum.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maleskoding.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maleskoding.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maleskoding.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maleskoding.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maleskoding.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maleskoding.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maleskoding.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maleskoding.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maleskoding.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maleskoding.wordpress.com/416/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=416&subd=maleskoding&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://maleskoding.wordpress.com/2009/05/10/di-mana-menaruh-session/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74769ceff9148ba0181933857f966fee?s=96&#38;d=" medium="image">
			<media:title type="html">petra</media:title>
		</media:content>

		<media:content url="http://maleskoding.files.wordpress.com/2009/05/3wayhandshake1.jpg" medium="image">
			<media:title type="html">3wayhandshake</media:title>
		</media:content>
	</item>
		<item>
		<title>Java Socket Programming: Simultaneous Connections</title>
		<link>http://maleskoding.wordpress.com/2009/05/09/java-socket-programming-simultaneous-connections/</link>
		<comments>http://maleskoding.wordpress.com/2009/05/09/java-socket-programming-simultaneous-connections/#comments</comments>
		<pubDate>Sat, 09 May 2009 16:49:04 +0000</pubDate>
		<dc:creator>petra</dc:creator>
				<category><![CDATA[Dedicated]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Lecture]]></category>
		<category><![CDATA[Medium]]></category>
		<category><![CDATA[Network Programming]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Web Programming]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[socket programming]]></category>

		<guid isPermaLink="false">http://maleskoding.wordpress.com/?p=410</guid>
		<description><![CDATA[Salah satu cara mengatasi kemungkinan timeout yang diakibatkan oleh blocking pada postingan sebelumnya adalah dengan menggunakan multithread.

Proses streaming ditangani oleh sebuah Thread yakni


package simpleserver;

import java.io.*;
import java.net.*;
import java.util.*;

public class SocketThread implements Runnable {

    private Socket socket;

    public SocketThread(Socket socket) {
        this.socket = socket;
 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=410&subd=maleskoding&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Salah satu cara mengatasi kemungkinan <em>timeout</em> yang diakibatkan oleh <em>blocking</em> pada <a href="http://maleskoding.wordpress.com/2009/05/06/java-socket-programming-multiple-connection/">postingan sebelum</a>nya adalah dengan menggunakan <em>multithread</em>.</p>
<p><span id="more-410"></span></p>
<p>Proses streaming ditangani oleh sebuah Thread yakni</p>
<pre name="code" class="java">

package simpleserver;

import java.io.*;
import java.net.*;
import java.util.*;

public class SocketThread implements Runnable {

    private Socket socket;

    public SocketThread(Socket socket) {
        this.socket = socket;
    }

    public void run() {

        //Membuat stream input/output dari client socket
        PrintWriter out;
        try {
            out = new PrintWriter(this.socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));

            Thread.sleep(3000);

            //Menampilkan string yang dikirim oleh client
            System.out.println(in.readLine());
            //Mengirimkan string &quot;Hello!&quot; ke client
            out.println(&quot;Hello World, Client!&quot;);

            //Menutup koneksi dan stream
            out.close();
            in.close();
            this.socket.close();
        } catch (IOException ex) {

        } catch (InterruptedException ex){

        }

    }
}
</pre>
<p>Di servernya tinggal</p>
<pre name="code" class="java">

public static void main(String[] args) throws IOException, InterruptedException {
        //Membuat Server Socket
        ServerSocket serverSocket = null;
        try {
            //Mencoba untuk binding ke port 4444
            serverSocket = new ServerSocket(4444);
        } catch (IOException e) {
            System.err.println(&quot;Could not listen on port: 4444.&quot;);
            System.exit(1);
        }

        //Membuat client Socket
        Socket clientSocket = null;
        while (true) {
            try {
                //Mencoba menerima koneksi socket dari client
                clientSocket = serverSocket.accept();
                SocketThread s = new SocketThread(clientSocket);
                s.run();
            } catch (IOException e) {
                System.err.println(&quot;Accept failed.&quot;);
                System.exit(1);
            }

        }
    }
</pre>
<p>Dengan demikian setelah sebuah <em>socket </em>selesai melakukan <em>blocking</em> untuk mencoba menerima koneksi maka aplikasi akan membangkitkan sebuah <em>thread</em> sehingga <em>thread</em> utama dapat kembali melakukan <em>blocking</em> untuk <em>socket</em> yang baru selagi <em>thread</em> yang dibangkitkan melakukan aktivitas dengan koneksi <em>socket</em> yang baru saja aktif.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maleskoding.wordpress.com/410/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maleskoding.wordpress.com/410/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maleskoding.wordpress.com/410/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maleskoding.wordpress.com/410/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maleskoding.wordpress.com/410/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maleskoding.wordpress.com/410/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maleskoding.wordpress.com/410/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maleskoding.wordpress.com/410/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maleskoding.wordpress.com/410/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maleskoding.wordpress.com/410/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=410&subd=maleskoding&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://maleskoding.wordpress.com/2009/05/09/java-socket-programming-simultaneous-connections/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74769ceff9148ba0181933857f966fee?s=96&#38;d=" medium="image">
			<media:title type="html">petra</media:title>
		</media:content>
	</item>
		<item>
		<title>Java Socket Programming: Multiple Connection</title>
		<link>http://maleskoding.wordpress.com/2009/05/06/java-socket-programming-multiple-connection/</link>
		<comments>http://maleskoding.wordpress.com/2009/05/06/java-socket-programming-multiple-connection/#comments</comments>
		<pubDate>Wed, 06 May 2009 15:12:38 +0000</pubDate>
		<dc:creator>petra</dc:creator>
				<category><![CDATA[Dedicated]]></category>
		<category><![CDATA[Easy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Lecture]]></category>
		<category><![CDATA[Network Programming]]></category>
		<category><![CDATA[Web Programming]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[socket programming]]></category>

		<guid isPermaLink="false">http://maleskoding.wordpress.com/?p=406</guid>
		<description><![CDATA[Pada post yang lalu, server yang dijalankan hanya bisa memaintain sebuah koneksi kemudian keluar. Cara untuk mengatasinya adalah dengan menggunakan infinite loop.



package simpleserver;

import java.net.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException, InterruptedException {
        //Membuat Server Socket
      [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=406&subd=maleskoding&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Pada <a href="http://maleskoding.wordpress.com/2009/05/05/java-socket-programming-simple-client-with-gui/">post yang lalu</a>, server yang dijalankan hanya bisa me<em>maintain</em> sebuah koneksi kemudian keluar. Cara untuk mengatasinya adalah dengan menggunakan <em>infinite loop</em>.<br />
<span id="more-406"></span></p>
<pre name="code" class="java">

package simpleserver;

import java.net.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException, InterruptedException {
        //Membuat Server Socket
        ServerSocket serverSocket = null;
        try {
            //Mencoba untuk binding ke port 4444
            serverSocket = new ServerSocket(4444);
        } catch (IOException e) {
            System.err.println(&quot;Could not listen on port: 4444.&quot;);
            System.exit(1);
        }

        //Membuat client Socket
        Socket clientSocket = null;
        while (true) {
            try {
                //Mencoba menerima koneksi socket dari client
                clientSocket = serverSocket.accept();
            } catch (IOException e) {
                System.err.println(&quot;Accept failed.&quot;);
                System.exit(1);
            }

            //Membuat stream input/output dari client socket
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

            //Menampilkan string yang dikirim oleh client
            System.out.println(in.readLine());
            //Mengirimkan string &quot;Hello!&quot; ke client
            out.println(&quot;Hello World, Client!&quot;);

            //Menutup koneksi dan stream
            out.close();
            in.close();
            clientSocket.close();
        }
    }
}
</pre>
<p>Ketika aplikasi masuk ke dalam loop, aplikasi akan melakukan <em>blocking</em> saat menerima koneksi. Setelah itu dijalankan dan akan kembali ke awal <em>loop</em> lagi. Dengan demikian aplikasi <em>client</em> dapat melakukan koneksi berkali-kali.</p>
<p><a href="http://maleskoding.files.wordpress.com/2009/05/ab.png"><img class="aligncenter size-full wp-image-407" title="ab" src="http://maleskoding.files.wordpress.com/2009/05/ab.png?w=390&#038;h=268" alt="ab" width="390" height="268" /></a>Server akan terus menyala</p>
<pre>run:

test
test
test
test
test</pre>
<p>Permasalahannya adalah ketika di dalam <em>loop</em> tersebut melakukan sebuah kegiatan yang cukup lama katakanlah selama 20 detik. Dengan menggunakan cara ini setiap koneksi akan menunggu koneksi yang sebelumnya selesai melaksanakan komunikasi. Kadang-kadang ada koneksi yang menetapkan waktu <em>timeout</em> selama 20 detik atau lebih. Koneksi-koneksi yang sedang menunggu ini akan putus sebelum melakukan komunikasi.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maleskoding.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maleskoding.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maleskoding.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maleskoding.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maleskoding.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maleskoding.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maleskoding.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maleskoding.wordpress.com/406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maleskoding.wordpress.com/406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maleskoding.wordpress.com/406/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=406&subd=maleskoding&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://maleskoding.wordpress.com/2009/05/06/java-socket-programming-multiple-connection/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74769ceff9148ba0181933857f966fee?s=96&#38;d=" medium="image">
			<media:title type="html">petra</media:title>
		</media:content>

		<media:content url="http://maleskoding.files.wordpress.com/2009/05/ab.png" medium="image">
			<media:title type="html">ab</media:title>
		</media:content>
	</item>
		<item>
		<title>Java Socket Programming: Simple Client with GUI</title>
		<link>http://maleskoding.wordpress.com/2009/05/05/java-socket-programming-simple-client-with-gui/</link>
		<comments>http://maleskoding.wordpress.com/2009/05/05/java-socket-programming-simple-client-with-gui/#comments</comments>
		<pubDate>Tue, 05 May 2009 16:37:01 +0000</pubDate>
		<dc:creator>petra</dc:creator>
				<category><![CDATA[Dedicated]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Lecture]]></category>
		<category><![CDATA[Medium]]></category>
		<category><![CDATA[Network Programming]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[net]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[socket programming]]></category>

		<guid isPermaLink="false">http://maleskoding.wordpress.com/?p=389</guid>
		<description><![CDATA[Kalau dipost yang ini dan ini, gw udah nyoba client menggunakan Telnet dan Command Line Application, sekarang gw bakal nyoba bikin client dengan GUI.

Jadi ada 3 buah obyek form: textbox, button, sama textarea. Nah pada textbox, gw pengen mengetikkan apa yang ingin gw kirim ke server. Kemudian gw klik button &#8220;Kirim&#8221;. Di textarea akan keliatan [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=389&subd=maleskoding&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Kalau dipost yang <a href="http://maleskoding.wordpress.com/2009/05/02/java-socket-programming-sedikit-pengenalan/">ini</a> dan <a href="http://maleskoding.wordpress.com/2009/05/03/java-socket-programming-simple-client/">ini</a>, gw udah nyoba client menggunakan <em>Telnet</em> dan <em>Command Line Application</em>, sekarang gw bakal nyoba bikin<em> client</em> dengan <a href="http://en.wikipedia.org/wiki/GUI">GUI</a>.</p>
<p><a href="http://maleskoding.files.wordpress.com/2009/05/a1.png"><img class="aligncenter size-full wp-image-390" title="a1" src="http://maleskoding.files.wordpress.com/2009/05/a1.png?w=442&#038;h=267" alt="a1" width="442" height="267" /></a></p>
<p>Jadi ada 3 buah obyek form: textbox, button, sama textarea. Nah pada textbox, gw pengen mengetikkan apa yang ingin gw kirim ke server. Kemudian gw klik button &#8220;Kirim&#8221;. Di textarea akan keliatan pesan-pesan dari server.</p>
<p><span id="more-389"></span>Kode pada <em>event mouse click </em>pada <em>button</em> akan mirip dengan kode pada aplikasi <em>simple client</em> sebelumnya.</p>
<pre name="code" class="java">

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
        //Bisa dijadiin masukan manual dari user
        String IPdest = &quot;127.0.0.1&quot;;
        Integer Portdest = 4444;
        //Menyiapkan socket dan streaming i/o
        Socket echoSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            //Membuka koneksi
            echoSocket = new Socket(IPdest, Portdest);
            //Membuka stream I/O dari socket yang sudah dibuka
            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
            //Mengirimkan string ke server
            String outputline = this.jTextField1.getText();
            out.println(outputline);
            //Menampilkan string yang dikirim oleh server
            this.jTextArea1.append(&quot;Server: &quot; + in.readLine() + &quot;\n&quot;);
            //Menutup koneksi dan stream
            out.close();
            in.close();
            echoSocket.close();
        } catch (UnknownHostException e) {
            this.jTextArea1.append(&quot;Error: &quot; + &quot;Don&#039;t know about host: &quot; + IPdest + &quot;\n&quot;);
        } catch (IOException e) {
            this.jTextArea1.append(&quot;Error: &quot; + &quot;Couldn&#039;t get I/O for &quot; + &quot;the connection to: &quot; + IPdest + &quot;\n&quot;);
        }
    }
</pre>
<p>Nah sekarang kita coba dengan program<em> server</em> yang ada di <em>post</em> pertama.</p>
<p><a href="http://maleskoding.files.wordpress.com/2009/05/a2.png"><img class="aligncenter size-full wp-image-391" title="a2" src="http://maleskoding.files.wordpress.com/2009/05/a2.png?w=392&#038;h=269" alt="a2" width="392" height="269" /></a></p>
<p>Hasil di <em>servernya</em>.</p>
<pre>run:
testtest
BUILD SUCCESSFUL (total time: 3 seconds)</pre>
<p>Bisa dilihat di atas, pada <em>textarea</em> akan muncul <em>Exception</em> yang menandakan koneksi gagal. Hal ini dikarenakan si aplikasi <em>server</em> langsung berhenti setelah koneksi pertama dijalankan.</p>
<p>Kodenya bisa diambil di <a href="http://maleskoding.files.wordpress.com/2009/05/simpleclientgui.odt">sini</a>. (<em>as usual, rename extension to zip</em>)</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maleskoding.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maleskoding.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maleskoding.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maleskoding.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maleskoding.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maleskoding.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maleskoding.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maleskoding.wordpress.com/389/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maleskoding.wordpress.com/389/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maleskoding.wordpress.com/389/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=389&subd=maleskoding&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://maleskoding.wordpress.com/2009/05/05/java-socket-programming-simple-client-with-gui/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74769ceff9148ba0181933857f966fee?s=96&#38;d=" medium="image">
			<media:title type="html">petra</media:title>
		</media:content>

		<media:content url="http://maleskoding.files.wordpress.com/2009/05/a1.png" medium="image">
			<media:title type="html">a1</media:title>
		</media:content>

		<media:content url="http://maleskoding.files.wordpress.com/2009/05/a2.png" medium="image">
			<media:title type="html">a2</media:title>
		</media:content>
	</item>
		<item>
		<title>Java Socket Programming: Simple Client</title>
		<link>http://maleskoding.wordpress.com/2009/05/03/java-socket-programming-simple-client/</link>
		<comments>http://maleskoding.wordpress.com/2009/05/03/java-socket-programming-simple-client/#comments</comments>
		<pubDate>Sun, 03 May 2009 19:03:35 +0000</pubDate>
		<dc:creator>petra</dc:creator>
				<category><![CDATA[Dedicated]]></category>
		<category><![CDATA[Easy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Lecture]]></category>
		<category><![CDATA[Network Programming]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Web Programming]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Java SE]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[socket programming]]></category>

		<guid isPermaLink="false">http://maleskoding.wordpress.com/?p=385</guid>
		<description><![CDATA[Kalau di post ini kita nyobanya pake Telnet, maka sekarang kita bikin client sederhana untuk berkomunikasi dengan server tersebut.

Kode servernya


package simpleserver;

import java.net.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {
        //Membuat Server Socket
        ServerSocket [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=385&subd=maleskoding&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Kalau di <a href="http://maleskoding.wordpress.com/2009/05/02/java-socket-programming-sedikit-pengenalan/">post ini</a> kita nyobanya pake Telnet, maka sekarang kita bikin <em>client</em> sederhana untuk berkomunikasi dengan <em>server</em> tersebut.<br />
<span id="more-385"></span><br />
Kode <em>server</em>nya</p>
<pre name="code" class="java">

package simpleserver;

import java.net.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {
        //Membuat Server Socket
        ServerSocket serverSocket = null;
        try {
            //Mencoba untuk binding ke port 4444
            serverSocket = new ServerSocket(4444);
        } catch (IOException e) {
            System.err.println(&quot;Could not listen on port: 4444.&quot;);
            System.exit(1);
        }

        //Membuat client Socket
        Socket clientSocket = null;
        try {
            //Mencoba menerima koneksi socket dari client
            clientSocket = serverSocket.accept();
        } catch (IOException e) {
            System.err.println(&quot;Accept failed.&quot;);
            System.exit(1);
        }

        //Membuat stream input/output dari client socket
        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

        //Menampilkan string yang dikirim oleh client
        System.out.println(in.readLine());
        //Mengirimkan string &quot;Hello!&quot; ke client
        out.println(&quot;Hello World, Client!&quot;);

        //Menutup koneksi dan stream
        out.close();
        in.close();
        clientSocket.close();
        serverSocket.close();
    }
}
</pre>
<p>Pada<em> server</em>, untuk melakukan <em>listening</em> perlu class <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html">ServerSocket</a>. Untuk menerima koneksi, <em>instance</em> perlu diinvokasi method <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html#accept()"><em>accept</em></a>nya. Method ini akan melakukan <em>blocking</em> sampai terdapat koneksi dan akan mengembalikan sebuah <em>instance</em> dari class <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/net/Socket.html">Socket</a>. Sebuah <em>socket</em> akan  mengurusi koneksi antara satu komputer dengan komputer yang lain. Pada <em>client</em> pun kita menggunakan class Socket tersebut untuk berkomunikasi dengan <em>server</em>. Untuk <em>streaming</em> datanya terdapat method <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/net/Socket.html#getInputStream()"><em>getInputStream</em></a> dan <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/net/Socket.html#getOutputStream()"><em>getOutputStream</em></a> yang dapat digunakan layaknya <em>standard input output</em>.</p>
<p>Berikut kodenya</p>
<pre name="code" class="java">

package simpleclient;

import java.io.*;
import java.net.*;

public class Main {

    public static void main(String[] args) throws IOException {
        String IPdest = &quot;127.0.0.1&quot;;
        Integer Portdest = 4444;
        //Menyiapkan socket dan streaming i/o
        Socket echoSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            //Membuka koneksi
            echoSocket = new Socket(IPdest, Portdest);
            //Membuka stream I/O dari socket yang sudah dibuka
            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(
                    echoSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println(&quot;Don&#039;t know about host: &quot; + IPdest);
            System.exit(1);
        } catch (IOException e) {
            System.err.println(&quot;Couldn&#039;t get I/O for &quot; + &quot;the connection to: &quot; + IPdest);
            System.exit(1);
        }
        //Mengirimkan string ke server
        out.println(&quot;Hello World, Server!&quot;);
        //Menampilkan string yang dikirim oleh server
        System.out.println(in.readLine());

        //Menutup koneksi dan stream
        out.close();
        in.close();
        echoSocket.close();
    }
}
</pre>
<p>Hasil pengujian pada <a href="http://www.netbeans.org">Netbeans</a>.<br />
Server</p>
<pre>
run:
Hello World, Server!
BUILD SUCCESSFUL (total time: 4 seconds)
</pre>
<p>Client</p>
<pre>
run:
Hello World, Client!
BUILD SUCCESSFUL (total time: 0 seconds)
</pre>
<p>Kode bisa diambil di <a href='http://maleskoding.files.wordpress.com/2009/05/simpleserver.odt'>sini</a> dan <a href='http://maleskoding.files.wordpress.com/2009/05/simpleclient.odt'>sini</a>.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maleskoding.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maleskoding.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maleskoding.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maleskoding.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maleskoding.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maleskoding.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maleskoding.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maleskoding.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maleskoding.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maleskoding.wordpress.com/385/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maleskoding.wordpress.com&blog=4688984&post=385&subd=maleskoding&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://maleskoding.wordpress.com/2009/05/03/java-socket-programming-simple-client/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74769ceff9148ba0181933857f966fee?s=96&#38;d=" medium="image">
			<media:title type="html">petra</media:title>
		</media:content>
	</item>
	</channel>
</rss>