Download Socket Programming

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Socket Programming - 1
(TCP)
As’ad Djamalilleil
http://kampusku.web.id
[email protected]
Contoh Komunikasi Jaringan
Program
Server
Server
[192.168.10.1]
Program
Client 1
Client
[192.168.10.2]
Program
Client 2
Program
Client 3
• Komunikasi jaringan memiliki 2 endpoint atau
titik komunikasi
• Setiap komputer memiliki 65535 buah nomor
port
• Program komputer yang ingin dikomunikasikan
lewat jaringan komputer harus terhubung ke
salah satu nomor port
• Nomor port yang digunakan harus “diikat” ke
sebuah socket
• Apabila ada data yang diterima, maka sistem
operasi dapat memberikan data tersebut ke
program yang tepat sesuai dengan socket yang
digunakan
Socket
• Socket adalah satu endpoint dari hubungan
komunikasi dua arah antara dua program yang
berjalan di jaringan
• Socket terikat pada sebuah nomor port sehingga
layer TCP dapat mengenali aplikasi mana yang
dikirimi data
• Endpoint adalah sebuah kombinasi dari alamat
IP dan nomor port
• Setiap koneksi TCP dapat secara unik dikenali
dari dua endpoint-nya
• Dengan demikian kita dapat memiliki banyak
koneksi antara host dan server
• Pada umumnya, setiap server memiliki
socket yang terikat dengan nomor port
tertentu
• Server menunggu sambil
mendengarkan/listening lewat socket
terhadap permintaan/request dari client
untuk terhubung
• Client mengetahui nama host dari
komputer server dan nomor port yang
digunakan server untuk listening
• Untuk meminta koneksi ke server, client
mencoba untuk “bertemu” dengan server
pada komputer dan port dari server
• Client juga perlu untuk mengenalkan
dirinya kepada server sehingga dapat
terhubung dengan nomor port yang akan
digunakan saat terhubung
• Pada saat server menerima permintaan
client untuk terhubung, server
mendapatkan sebuah socket baru yang
terikat dengan port lokal yang sama dan
juga memiliki remote endpoint yang
menyimpan alamat dan port dari client
• Server membuat socket baru agar tetap
dapat mendengarkan permintaan dari
socket awal, sementara melayani client
yang telah terkoneksi
• Apabila terkoneksi, sebuah socket juga
akan dibuat di client, dan dapat digunakan
untuk berkomunikasi dengan server
• Pada akhirnya, server dan client dapat
berkomunikasi lewat socket-nya masingmasing
Paket java.net
• Paket java.net mendukung dua macam
protokol jaringan yang umum:
• TCP (Transmission Control Protocol),
digunakan untuk komunikasi antar dua
aplikasi. TCP biasanya digunakan pada
protokol TCP/IP
• UDP (User Datagram Protocol), protokol
connection-less yang memungkinkan
paket data dikirimkan antar aplikasi
• Di dalam paket java.net memiliki class
Socket dan ServerSocket
• Class Socket merupakan implementasi
satu sisi dari koneksi dua arah antara
program Java kita dengan program lain
pada jaringan
• Class ServerSocket merupakan
implementasi sebuah socket dimana
server-server dapat gunakan untuk
mendengarkan dan menerima koneksi ke
client-client
Method Class ServerSocket
Method
Keterangan
public ServerSocket(int port)
throws IOException
Mencoba untuk membuat socket server yang terikat
dengan port tertentu. Exception terjadi jika port tersebut
telah digunakan oleh aplikasi lain
public ServerSocket(int port, int
backlog) throws IOException
Mirip dengan konstruktor di atas, parameter backlog
menentukan seberapa banyak client yang disimpan
pada daftar tunggu
public ServerSocket(int port, int
backlog, InetAddress address)
throws IOException
Mirip dengan konstruktor di atas, parameter
InetAddress menentukan alamat IP lokal untuk diikat.
InetAddress digunakan untuk server yang dapat
memiliki beberapa alamat IP, memungkinkan server
untuk menentukan alamat IP mana yang bertugas
menerima request dari client
public ServerSocket() throws
IOException
Membuat socket server yang tidak terikat. Bila
menggunakan konstruktor ini, gunakan method bind()
untuk mengikat socket server
Method
Keterangan
public int getLocalPort()
Memberikan nomor port yang socket server gunakan
untuk mendengar. Method ini berguna jika nilai 0
digunakan untuk nomor port pada konstruktor dan
membiarkan server yang mencari port
public Socket accept() throws
IOException
Menunggu permintaan client. Method ini terblok sampai
ada client yang terhubung ke server pada port yang
sesuai atau socket kehabisan waktu (time out), dengan
asumsi nilai time-out telah ditentukan menggunakan
method setSoTimeOut(). Bila tidak maka method ini
terblok terus menerus
public void setSoTimeout(int
timeout)
Menentukan nilai time-out untuk berapa lama socket
server menunggu client setelah method accept()
dipanggil
public void bind(SocketAddress
host, int backlog)
Mengikat socket ke server dan port tertentu pada objek
SocketAddress. Gunakan method ini jika objek
ServerSocket dibuat menggunakan konstruktor tanpa
argumen
Method Class Socket
Method
Keterangan
public Socket(String host, int
port) throws
UnknownHostException,
IOException
Method ini mencoba untuk terhubung ke server tertentu
pada port tertentu. Jika konstruktor tidak memberikan
exception, koneksi sukses dan client terhubung ke
server
public Socket(InetAddress host,
int port) throws IOException
Method ini identik dengan konstruktor sebelumnya,
kecuali host ditunjuk oleh sebuah objek InetAddress
public Socket(String host, int
port, InetAddress localAddress,
int localPort) throws
IOException.
Terhubung ke host dan port tertentu, membuat sebuah
socket pada host lokal pada alamat dan port tertentu
public Socket(InetAddress host,
int port, InetAddress
localAddress, int localPort)
throws IOException.
Method ini identik dengan konstuktor sebelumnya,
kecuali host ditunjuk oleh sebuah objek InetAddress,
bukan String
public Socket()
Membuat sebuah socket yang tidak terhubung.
Gunakan method connect() untuk menghubungkan
socket ini ke sebuah server
Method
Keterangan
public void
connect(SocketAddress host,
int timeout) throws
IOException
Method ini menghubungkan socket ke
host tertentu. Method ini dibutuhkan
hanya jika objek Socket dibuat lewat
konstruktor tanpa argumen
public InetAddress
getInetAddress()
Method ini memberikan alamat dari
komputer lain yang terhubung dengan
socket ini
public int getPort()
Memberikan nomor port yang terhubung
dengan socket dari komputer remote
public int getLocalPort()
Memberikan nomor port yang terhubung
dengan socket pada komputer lokal
public SocketAddress
getRemoteSocketAddress()
Memberikan alamat dari socket remote
Method
Keterangan
public InputStream
getInputStream() throws
IOException
Memberikan aliran input dari socket. Aliran
input terhubung ke aliran output dari socket
remote
public OutputStream
getOutputStream() throws
IOException
Memberikan aliran input dari socket. Aliran
output terhubung ke aliran input dari socket
remote
public void close() throws
IOException
Menutup socket, menjadikan objek socket
ini tidak lagi dapat dihubungkan ke server
manapun
Method Class InetAddress
Method
static InetAddress
getByAddress(byte[] addr)
Keterangan
Memberikan sebuah objek
InetAddress berdasarkan alamat IP
mentah
static InetAddress
Membuat sebuah InetAddress
getByAddress(String host, byte[] berdasarkan pada nama host dan
addr)
alamat IP yang diberikan
static InetAddress
getByName(String host)
Menentukan alamat IP dari host,
berdasarkan nama host
String getHostAddress()
Memberikan alamat IP berupa string
String getHostName()
Memberikan nama host dari alamat IP
ini
static InetAddress InetAddress
getLocalHost()
Memberikan nama host lokal
String toString()
Mengubah alamat IP ke string
Contoh aplikasi client
import java.net.*;
import java.io.*;
public class TCPClient {
public static void main (String args[]) {
//arguments supply message and hostname of
destination
Socket s = null;
try{
int serverPort = 7896;
s = new Socket(args[1], serverPort);
DataInputStream in = new
DataInputStream(s.getInputStream());
DataOutputStream out = new
DataOutputStream(s.getOutputStream());
out.writeUTF(args[0]); // UTF is a string encoding
String data = in.readUTF();
System.out.println("Received: " + data);
}
catch (UnknownHostException e){
System.out.println("Sock:" + e.getMessage());
}
catch (EOFException e){
System.out.println("EOF:" + e.getMessage());
}
catch (IOException e){
System.out.println("IO:" + e.getMessage());
}
finally {
if(s!=null)
try {
s.close();
}
catch (IOException e){
/*close failed*/
}
}
}
}
Contoh aplikasi server
import java.net.*;
import java.io.*;
public class TCPServer {
public static void main (String args[]) {
try{
int serverPort = 7896;
ServerSocket listenSocket = new
ServerSocket(serverPort);
while(true) {
Socket clientSocket = listenSocket.accept();
Connection c = new Connection(clientSocket);
}
}
catch(IOException e){
System.out.println("Listen :"+e.getMessage());
}
}
}
class Connection extends Thread {
DataInputStream in;
DataOutputStream out;
Socket clientSocket;
public Connection(Socket aClientSocket) {
try {
clientSocket = aClientSocket;
in = new
DataInputStream(clientSocket.getInputStream());
out =new
DataOutputStream(clientSocket.getOutputStream());
this.start();
}
catch(IOException e){
System.out.println("Connection:" + e.getMessage());
}
}
public void run(){
try { // an echo server
String data = in.readUTF();
System.out.println(data);
out.writeUTF(data);
}
catch(EOFException e){
System.out.println("EOF:" + e.getMessage());
}
catch(IOException e){
System.out.println("IO:" + e.getMessage());
}
finally {
try {
clientSocket.close();
}
catch (IOException e){
/*close failed*/
}
}
}
}