Skip navigation


Lanjutan dari yang sebelumnya.

Di sini, gw akan mencoba ngebuat sebuah server tebak-tebakan. Server ini akan membangkitkan sebuah angka, mencoba menerima masukkan dari client sebuah angka, dan memeriksa kecocokan angka dari client dengan angka yang sudah dibangkitkan. Gw akan mencoba memperagakan bagaimana sebuah server dapat memegang koneksi dan melakukan komunikasi terus menerus sampai salah satu memutuskan.

package tebaktebakanserver;

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

public class Tebakan {

private static int Angka;

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(“Could not listen on port: 4444.”);
System.exit(1);
}
generateAngka();

//Membuat client Socket
Socket clientSocket = null;
try {
//Mencoba menerima koneksi socket dari client
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println(“Accept failed.”);
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()));

//String untuk menampung input/output
String inputline = “”;
String outputline = “”;

while ((inputline = in.readLine()) != null) {
outputline = Tebak(inputline);
System.out.println(inputline + ” ” + outputline);
out.println(outputline);
if (outputline.toLowerCase().equals(“bye”)) {
break;
}
}
//Menutup koneksi dan stream
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}

private static String Tebak(String input) {
String output;
if (input.toLowerCase().equals(“mulai”)) {
output = “Mulai baru”;
generateAngka();
} else if (input.toLowerCase().equals(“nyerah”)) {
output = “Bye”;
} else {
try {
int tebakan = Integer.parseInt(input);
if (tebakan > Angka) {
output = “Lebih besar”;
} else if (tebakan < Angka) { output = "Lebih kecil"; } else { output = "Benar\nMulai baru"; generateAngka(); } } catch (NumberFormatException ex) { output = "Bukan angka. Ulangi!"; } } return output; } private static void generateAngka() { Random rd = new Random(); Angka = Math.abs(rd.nextInt() % 1000); System.out.println(Angka); } } [/sourcecode] Ini hasil testing di Telnet

C:\Documents and Settings\Petra Barus>Telnet 127.0.0.1 4444
100
Lebih kecil
200
Lebih kecil
800
Lebih kecil
890
Lebih besar
830
Lebih kecil
839
Benar
Mulai baru
nyerah
Bye!
C:\Documents and Settings\Petra Barus>

Ini output di programnya

839
100 Lebih kecil
200 Lebih kecil
800 Lebih kecil
890 Lebih besar
830 Lebih kecil
975
839 Benar
Mulai baru
nyerah Bye

Permasalahan pada kode di atas adalah ketika sebuah aplikasi Telnet lain berusaha berkomunikasi dengan aplikasi tersebut maka aplikasi Telnet akan melakukan blocking. Aplikasi tidak akan dapat menerima data dari aplikasi Telnet kedua. Setelah koneksi pertama putus maka aplikasi akan keluar. Data dari aplikasi kedua tidak akan pernah sampai ke aplikasi Tebak-tebakan ini.

Kode dapat diambil di sini. (Jangan lupa rename extension ke zip)

One Trackback/Pingback

  1. By Contoh dialog SMTP dan POP « Males Koding on 13 Mei 2009 at 2:08 pm

    […] ConnectionJava Socket Programming: Simultaneous ConnectionsJava Socket Programming: Simple ClientJava Socket Programming: Server Tebak-TebakanYou Had Me At HELOSimulasi Local Network di […]

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: