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);
}
}
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)
Filed under: Dedicated, Easy, Java, Lecture, Network Programming, Snippets, tutorial , Programming, Network Programming, socket, Java, Java SE



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