![]() |
| Ilustrasi |
Socket adalah suatu abtraksi yang mana aplikasi dapat mengirim dan menerima data seperti sama halnya dengan membuka suatu file untuk dibaca dan ditulis pada tempat penyimpanan file. Socket memungkinkan untuk masuk kedalam jaringan dan berkomunikasi dengan aplikasi lain yang juga masuk kedalam jaringan yang sama. Informasi yang ditulis kedalam socket pada suatu aplikasi pada suatu mesin dapat dibaca oleh aplikasi lain pada mesin yang berbeda dan sebaliknya.
Apa fungsi dari socket?
Fungsi utama dari socket yaitu mengatur pengiriman data pada jaringan komputer. Maksudnya yaitu memberitahukan apakah dia client atau serve,memberikan informasi data yang dikirim, memberikan informasi dimana data yang disimpan, memberikan informasi kemana data aka dikirimkan, dan lainnya.
Source Code Server #1:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
/* * To change this template, choose Tools | Templates * and open the template in the editor. *//** * * @author BASKARA */public class Server { public static void main(String[] args) { Socket s = null; ServerSocket ss; try { ss = new ServerSocket(1234); s = ss.accept(); //waiting connection InputStream in = s.getInputStream(); OutputStream out = s.getOutputStream(); int dummy = 0; while(true) { dummy = in.read(); System.out.print((char)dummy); if((char)dummy=='\n') break; } dummy = 0; String pesan = "Anda siapa?(1. Admin 2. User)"; String pesan1 = "Selamat datang admin!\n"; String pesan2 = "Selamat datang user!\n"; //String pesan3 = "!"; out.write(pesan.getBytes()); out.flush(); while(true) { dummy = in.read(); if(dummy=='1') { System.out.print("masuk\n"); out.write(pesan1.getBytes()); out.flush(); break; /*dummy = (dummy - 48) + (dummy - 48); out.write((int)dummy); out.flush();*/ //out.write(pesan3.getBytes()); //out.write(new Integer(123).toString()); //out.flush(); //break; } else { System.out.print("masuk\n"); out.write(pesan2.getBytes()); out.flush(); break; /*dummy = (dummy - 48) + (dummy - 48); out.write((int)dummy); out.flush();*/ //out.write(pesan3.getBytes()); //out.write(new Integer(123).toString()); //out.flush(); //break; } } in.close(); out.close(); s.close(); ss.close(); } catch (IOException ex) { Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex); }}}
Source Code Client #1:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author BASKARA
*/
public class Client {
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1",1234);
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
String tes = "Tes koneksi\n";
out.write(tes.getBytes());
out.flush();
int dummy = 0;
while(true)
{
dummy = in.read();
System.out.print((char)dummy);
if((char)dummy==')')
break;
}
//System.out.print('\n');
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
tes = br.readLine();
//System.out.print(tes.toString());
out.write(tes.getBytes());
out.flush();
dummy = 0;
while(true)
{
dummy = in.read();
//System.out.print(dummy);
System.out.print((char)dummy);
if((char)dummy=='!')
break;
}
in.close();
out.close();
s.close();
} catch (UnknownHostException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Alur program pertama di atas setelah terhubung adalah sebagai berikut:
1. Client mengirim pesan tes koneksi ke server.
2. Setelah dibaca oleh server, server akan mengirim pertanyaan apakah client merupakan admin atau user.
3. Client mengirimkan balasan ke server, jika balasan berupa "1" maka dia adalah admin, jika "2" atau selain itu maka dia adalah user.
Source Code Server#2:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author BASKARA
*/
public class Server {
public static void main(String[] args) {
Socket s = null;
ServerSocket ss;
try {
ss = new ServerSocket(1234);
s = ss.accept(); //waiting connection
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
int dummy = 0;
while(true)
{
dummy = in.read();
System.out.print((char)dummy);
if((char)dummy=='\n')
break;
}
dummy = 0;
String pesan = "Masukkan angka yang ingin dikalikan 2: ";
//String pesan1 = "Selamat datang admin!\n";
//String pesan2 = "Selamat datang user!\n";
String pesan3 = "!";
out.write(pesan.getBytes());
out.flush();
while(true)
{
dummy = in.read();
if(dummy=='1')
{
/*System.out.print("masuk\n");
out.write(pesan1.getBytes());
out.flush();
break;*/
dummy = (dummy - 48) + (dummy - 48); //kode ASCII jadi harus dikurangi 48 dahulu
out.write((int)dummy);
out.flush();
//out.write(pesan3.getBytes());
//out.write(new Integer(123).toString());
//out.flush();
break;
}
else
{
/*System.out.print("masuk\n");
out.write(pesan2.getBytes());
out.flush();
break;*/
dummy = (dummy - 48) + (dummy - 48);
out.write((int)dummy);
out.flush();
//out.write(pesan3.getBytes());
//out.write(new Integer(123).toString());
//out.flush();
break;
}
}
in.close();
out.close();
s.close();
ss.close();
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Source Code Client#2:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author BASKARA
*/
public class Client {
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1",1234);
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
String tes = "Tes koneksi\n";
out.write(tes.getBytes());
out.flush();
int dummy = 0;
while(true)
{
dummy = in.read();
System.out.print((char)dummy);
if((char)dummy==')')
break;
}
//System.out.print('\n');
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
tes = br.readLine();
//System.out.print(tes.toString());
out.write(tes.getBytes());
out.flush();
dummy = 0;
while(true)
{
dummy = in.read();
System.out.print(dummy);
//System.out.print((char)dummy);
//if((char)dummy=='!')
break;
}
in.close();
out.close();
s.close();
} catch (UnknownHostException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Alur program kedua di atas setelah dijalankan adalah sebagai berikut:
1. Client melakukan tes koneksi ke server.
2. Server membalas, meminta input angka yang akan dilipatgandakan.
3. Client mengirim angka ke server.
4. Angka berupa ASCII dikurangi 48 supaya ketahuan angka sesungguhnya, kemudian dilipatgandakan dan dikirim kembali ke Client.

Tidak ada komentar:
Posting Komentar