Selasa, 18 Februari 2014

Contoh Socket Programming bahasa Java : Mendapatkan Port Number

Berikut ini step - by  - step bagaimana mendapatkan port number ketika mengakses suatu website menggunakan bahasa Java. Pertama siapkan terlebih dahulu text editor untuk membuat kode

Ketikkan kode dibawah ini, dan simpan dengan nama Ports.java
import java.net.*;
import java.io.*;
public class Ports
{
public static void main ( String[] args ) throws IOException
{
String hostname = args[0];
Socket s = null;
try
{
// this is to see if host exists:
InetAddress ipaddress = InetAddress.getByName(hostname);
// int p = 21; // ftp
// int p = 22; // ssh / sftp
// int p = 23; // telnet
// int p = 25; // smtp
int p = 80; // http
// int p = 110; // pop3
// int p = 143; // imap
try
{
s = new Socket(hostname, p);
System.out.println("A server is running on port " + p +
".");
s.close();
}
catch (IOException e)
{
System.out.println("No server on port " + p + ".");
}
}
catch ( UnknownHostException e )
{
System.out.println("Could not find host: " + hostname);
}
if (s != null)
{
try
{
s.close();
}
catch ( IOException ioEx )
{}
}
}
}

Setelah itu buka terminal, ubah direktori ke lokasi file Ports.java
Compile file Ports.java menggunakan perintah
javac Ports.java
Jalankan Program dengan perintah
java Ports url_yang_diinginkan
Jika url berada di Internet, jangan lupa sambungkan koneksi internet terlebih dulu
java Ports www.google.com
Port number dari www.google.com yaitu 80 muncul di jendela terminal, selamat anda berhasil :D
Semoga bermanfaat :D

sumber : Modul Praktikum Jaringan Komputer, Program Studi Sistem dan Teknologi Informasi, STEI ITB


Contoh Socket Programming bahasa C : Chat sederhana client - server

Sesuai dengan judulnya, kita akan membuat sebuah program chat antara client dengan server menggunakan bahasa C. Siapkan text editor untuk membuat kode.

Pertama, kita akan membuat server berikut ini kode yang perlu diketikkan
#include<stdio.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netdb.h>
#include<stdlib.h>
#include<string.h>
#define MAX 80
#define PORT 43454
#define SA struct sockaddr
void func(int sockfd)
{
char buff[MAX];
int n;
for(;;)
{
bzero(buff,MAX);
read(sockfd,buff,sizeof(buff));
printf("From client: %s\t To client : ",buff);
bzero(buff,MAX);
n=0;
while((buff[n++]=getchar())!='\n');
write(sockfd,buff,sizeof(buff));
if(strncmp("exit",buff,4)==0)
{
printf("Server Exit...\n");
break;
}
}
}
int main()
{
int sockfd,connfd,len;
struct sockaddr_in servaddr,cli;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(PORT);
if((bind(sockfd,(SA*)&servaddr, sizeof(servaddr)))!=0)
{
printf("socket bind failed...\n");
exit(0);
}
else
printf("Socket successfully binded..\n");
if((listen(sockfd,5))!=0)
{
printf("Listen failed...\n");
exit(0);
}
else
printf("Server listening..\n");
len=sizeof(cli);
connfd=accept(sockfd,(SA *)&cli,&len);
if(connfd<0)
{
printf("server acccept failed...\n");
exit(0);
}
else
printf("server acccept the client...\n");
func(connfd);
close(sockfd);
}

source : http://mcalabprogram.blogspot.com/2012/01/tcp-sockets-chat-applicationserver.html

Setelah itu kita membuat client dengan kode berikut :
#include<stdio.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netdb.h>
#include<string.h>
#include<stdlib.h>
#define MAX 80
#define PORT 43454
#define SA struct sockaddr
void func(int sockfd)
{
char buff[MAX];
int n;
for(;;)
{
bzero(buff,sizeof(buff));
printf("Enter the string : ");
n=0;
while((buff[n++]=getchar())!='\n');
write(sockfd,buff,sizeof(buff));
bzero(buff,sizeof(buff));
read(sockfd,buff,sizeof(buff));
printf("From Server : %s",buff);
if((strncmp(buff,"exit",4))==0)
{
printf("Client Exit...\n");
break;
}
}
}

int main()
{
int sockfd,connfd;
struct sockaddr_in servaddr,cli;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
servaddr.sin_port=htons(PORT);
if(connect(sockfd,(SA *)&servaddr,sizeof(servaddr))!=0)
{
printf("connection with the server failed...\n");
exit(0);
}
else
printf("connected to the server..\n");
func(sockfd);
close(sockfd);
}

source : http://mcalabprogram.blogspot.com/2012/01/tcp-sockets-chat-applicationserver.html

Setelah selesai membuat file kode bahasa C, buka terminal, ubah direktori ke lokasi file .c, kemudian compile dan run file .c, gunakan perintah berikut :
gcc -o nama_aplikasi nama_file.c
./nama_aplikasi


Setelah server dijalankan, buka terminal baru, ubah direktori seperti langkah sebelumnya, kemudian compile dan run dengan cara yang sama seperti langkah sebelumnya

Sekarang telah muncul tempat untuk mengisi pesan di kedua jendela terminal
Sekarang kita coba menulis pesan "halo :D" pada client, coba perhatikan yang muncul di server
Pesan dari client muncul di jendela server, kemudian kita coba mengirim pesan balik "halo juga :D"
 Pesan dari server muncul di jendela client, sekarang kita bisa bercakap - cakap sendiri jika sedang sepi hahaha, semoga bermanfaat :D

sumber : http://mcalabprogram.blogspot.com/2012/01/tcp-sockets-chat-applicationserver.html






Contoh Socket Programming bahasa Java : Mendapatkan tanggal Server

Berikut ini contoh pemrograman socket dalam bahasa Java. Kali ini kita menggunakan jenis client - server.

Sebelum memulai, siapkan text editor untuk membuat kode program.

Buka text editor, kemudian masukan kode di bawah ini untuk membuat server
import java.net.*;
import java.io.*;
import java.util.*;

class DateServer
{
    publicstaticvoid main(String args[]) throws Exception
    {
        ServerSocket s=new ServerSocket(5217);

        while(true)
        {
            System.out.println("Waiting For Connection ...");
            Socket soc=s.accept();
            DataOutputStream out=new DataOutputStream(soc.getOutputStream());
            out.writeBytes("Server Date" + (new Date()).toString() + "\n");
            out.close();
            soc.close();
        }
        
    }
}
source : http://www.dailyfreecode.com/code/date-server-client-1249.aspx





Kemudian ketikan kode berikut untuk membuat client
import java.io.*;
import java.net.*;

class DateClient
{
    publicstaticvoid main(String args[]) throws Exception
    {
        Socket soc=new Socket(InetAddress.getLocalHost(),5217);        
        BufferedReader in=new BufferedReader(
                new InputStreamReader(
                        soc.getInputStream()
                        )
                    );

        System.out.println(in.readLine());
    }    
}

source :  http://www.dailyfreecode.com/code/date-server-client-1249.aspx
Setelah itu, buka jendela terminal, ubah direktori ke tempat dimana file DateServer.java dan DateClient.java berada

Kemudian, compile file DateServer.java menggunakan perintah
javac DateServer.java
setelah itu masukan perintah 
java DateServer

Buka jendela terminal baru, ubah direktori seperti langkah sebelumnya, kemudian masukan perintah
javac DateClient.java
kemudian masukan perintah java DateClient
Tanggal dari server akan muncul pada jendela terminal DateClient

Selamat anda berhasil mendapatkan tanggal server :D

sumber :
http://www.dailyfreecode.com/code/date-server-client-1249.aspx





Contoh Socket Programming bahasa C : Mendapatkan tanggal dari server

Pemrograman socket dapat kita lakukan untuk mengeset kegunaan dari socket. Berikut ini contoh pemrograman socket dalam bahasa C, dengan basis client-server untuk mendapatkan tanggal dari server.

Siapkan sebuah text editor, admin kali ini menggunakan sublime text 2, kemudian ketik kode dibawah untuk membuat server :
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <time.h> 

int main(int argc, char *argv[])
{
    int listenfd = 0, connfd = 0;
    struct sockaddr_in serv_addr; 

    char sendBuff[1025];
    time_t ticks; 

    listenfd = socket(AF_INET, SOCK_STREAM, 0);
    memset(&serv_addr, '0', sizeof(serv_addr));
    memset(sendBuff, '0', sizeof(sendBuff)); 

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    serv_addr.sin_port = htons(5000); 

    bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); 

    listen(listenfd, 10); 

    while(1)
    {
        connfd = accept(listenfd, (struct sockaddr*)NULL, NULL); 

        ticks = time(NULL);
        snprintf(sendBuff, sizeof(sendBuff), "%.24s\r\n", ctime(&ticks));
        write(connfd, sendBuff, strlen(sendBuff)); 

        close(connfd);
        sleep(1);
     }
}

source : http://www.thegeekstuff.com/2011/12/c-socket-programming/

Simpan file dengan nama server.c,
Setelah itu, kita membuat kode untuk client seperti berikut :
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <arpa/inet.h> 

int main(int argc, char *argv[])
{
    int sockfd = 0, n = 0;
    char recvBuff[1024];
    struct sockaddr_in serv_addr; 

    if(argc != 2)
    {
        printf("\n Usage: %s <ip of server> \n",argv[0]);
        return 1;
    } 

    memset(recvBuff, '0',sizeof(recvBuff));
    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        printf("\n Error : Could not create socket \n");
        return 1;
    } 

    memset(&serv_addr, '0', sizeof(serv_addr)); 

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(5000); 

    if(inet_pton(AF_INET, argv[1], &serv_addr.sin_addr)<=0)
    {
        printf("\n inet_pton error occured\n");
        return 1;
    } 

    if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
    {
       printf("\n Error : Connect Failed \n");
       return 1;
    } 

    while ( (n = read(sockfd, recvBuff, sizeof(recvBuff)-1)) > 0)
    {
        recvBuff[n] = 0;
        if(fputs(recvBuff, stdout) == EOF)
        {
            printf("\n Error : Fputs error\n");
        }
    } 

    if(n < 0)
    {
        printf("\n Read error \n");
    }

return 0;
}
source : http://www.thegeekstuff.com/2011/12/c-socket-programming/

Simpan file dengan nama client.c
Setelah itu buka terminal, ubah direktori ke lokasi file server.c dan client.c
berikut ini contohnya, 

Lakukan compile terhadap file server.c dan client.c
gunakan gcc -o nama_aplikasi nama_file
contoh : gcc -o server server.c


Setelah itu, buka jendela terminal baru. Jalankan server di satu jendela terminal terlebih dahulu, kemudian jalankan client di terminal yang lain. Pastikan direktori kedua terminal berada di tempat dimana server.c dan client.c berada.
berikut ini perintah yang diperlukan :
 ./server untuk server
./client 127.0.0.1 untuk client
Setelah memasukan kode pada terminal client, akan muncul tanggal yang ada pada server
Berikut gambar eksekusi kode di atas

sumber :
http://www.thegeekstuff.com/2011/12/c-socket-programming/

Contoh Socket Programming bahasa Python : Mengirim data ke server

Setelah pada pos sebelumnya kita mencoba mendapatkan tanggal server dengan bahasa C dan Java, kali ini kita akan mencobanya dalam bahasa Python. Namun kali ini kita tidak menerima data tanggal. Kita sebagai Client akan mengirimkan data pada Server.
Sesuai dengan standar prosedur, siapkan text editor terlebih dahulu.

Berbeda dengan bahasa Java dan C, kita mengeset Port number dengan sebuah file lain yang diberi nama config.py berikut ini kodenya
# config.py
PORT=2014 
source : http://pythonadventures.wordpress.com/2013/07/06/a-basic-socket-client-server-example/

Ketik kode di atas, lalu simpan sebagai config.py
Kemudian ketikkan kode berikut untuk membuat server
#!/usr/bin/env python # server.py import socket import select import config as cfg import Queue from threading import Thread from time import sleep from random import randint import sys class ProcessThread(Thread): def __init__(self): super(ProcessThread, self).__init__() self.running = True self.q = Queue.Queue() def add(self, data): self.q.put(data) def stop(self): self.running = False def run(self): q = self.q while self.running: try: # block for 1 second only: value = q.get(block=True, timeout=1) process(value) except Queue.Empty: sys.stdout.write('.') sys.stdout.flush() # if not q.empty(): print "Elements left in the queue:" while not q.empty(): print q.get() t = ProcessThread() t.start() def process(value): """ Implement this. Do something useful with the received data. """ print value sleep(randint(1,9)) # emulating processing time def main(): s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = cfg.PORT # Reserve a port for your service. s.bind((host, port)) # Bind to the port print "Listening on port {p}...".format(p=port) s.listen(5) # Now wait for client connection. while True: try: client, addr = s.accept() ready = select.select([client,],[], [],2) if ready[0]: data = client.recv(4096) #print data t.add(data) except KeyboardInterrupt: print print "Stop." break except socket.error, msg: print "Socket error! %s" % msg break # cleanup() def cleanup(): t.stop() t.join() ######################################################### if __name__ == "__main__": main()
source : http://pythonadventures.wordpress.com/2013/07/06/a-basic-socket-client-server-example/

Simpan file dengan format .py, admin menyimpan dengan nama listenserver.py
Selanjutnya ketikkan lagi kode berikut untuk membuat client.
#!/usr/bin/env python
# client.py
import config as cfg
import sys
import socket
def main(elems):
    try:
        for e in elems:
            client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            host = socket.gethostname()
            client.connect((host, cfg.PORT))
            client.send(e)
            client.shutdown(socket.SHUT_RDWR)
            client.close()
    except Exception as msg:
        print msg
#########################################################
if __name__ == "__main__":
    main(sys.argv[1:])
source : http://pythonadventures.wordpress.com/2013/07/06/a-basic-socket-client-server-example/
Setelah selesai buka terminal, ubah direktori ke tempat file server,client,dan config berada. Gunakan perintah 
cd lokasi

Masukan perintah 
python nama_file_server.py
nama file yang admin gunakan listenserver.py berikut ini gambarnya

Akan muncul tulisan listening dan karakter "." yang bertambah terus. Hal ini berarti server kita telah berjalan dan menunggu informasi dari client.
Buka jendela terminal baru, ubah direktori seperti langkah di atas, kemudian masukan perintah
python nama_file_client.py data1 data2 data3 ...
Nama file yang admin gunakan yaitu listenclient. Data dapat berupa huruf atau angka dengan urutan sembarang. berikut ini gambarnya
Data yang kita kirim melalui client akan dimunculkan satu per satu di jendela terminal server dengan urutan sesuai yang kita ketikkan pada jendela terminal client. Selamat anda berhasil :D

sumber : http://pythonadventures.wordpress.com/2013/07/06/a-basic-socket-client-server-example/








Client-Server? P2P? Socket?

Kata - kata yang ada di judul postingan ini pasti kerap kita temukan di dunia jaringan komputer. Client -server dan P2P merupakan paradigma cara berkomunikasi dalam jaringan. Socket adalah suatu komponen yang terdapat dalam jaringan. Bagaimanakah sistem dari client-server dan P2P dalam berkomunikasi? Apa itu socket?

Client-server 
Tipe jaringan client server terdiri dari dua komponen utama yaitu client dan server. Server merupakan komputer yang berfungsi untuk untuk menjalankan proses komunikasi dengan menerima permintaan (request) dari client. Client merupakan komputer yang menjalankan proses komunikasi dengan memberikan request. Bentuk jaringan client server terlihat seperti gambar berikut :

Sumber : http://optionmatrix.com/services/client-server

Berdasarkan ilustrasi di atas terlihat bahwa semua client terhubung dengan server dan tidak ada koneksi dari suatu client dengan client lainnnya secara langsung. Untuk dapat melakukan komunikasi dengan client lain, suatu client harus mengirimkan request pada server terlebih dahulu untuk kemudian diteruskan pada client yang dituju. Server tidak hanya dapat menerima request dari client namun juga dapat terhubung dengan device yang dapat digunakan bersama. Server juga dapat digunakan untuk file sharing. Tipe jaringan ini memiliki keamanan yang lebih baik di sisi client. Namun akses yang dilakukan lebih lambat karena komunikasi harus melalui server terlebih dahulu.

P2P (Peer-to-peer)
Berbeda dengan tipe jaringan client-server, tipe jaringan p2p tidak menggunakan server. Pada tipe jaringan ini, setiap client terhubung dengan client lainnya. Komunikasi antar client dapat dilakukan secara langsung jika client yang sedang berkomunikasi terhubung langsung satu sama lain. Berikut ini ilustrasi model p2p :
Sumber : http://yadhutony.blogspot.com/2012/11/how-to-block-p2p-traffic-on-cisco-router.html

Dalam ilustrasi terlihat bahwa client terhubung langsung dengan client lainnya. Client yang mengirimkan request pada client lainnya secara langsung. Tipe jaringan ini memiliki kecepatan akses yang lebih cepat. Namun keamanan jaringannya kurang. Koneksi antar client yang dilakukan secara langsung dapat menjadi media penyebaran virus atau malware lainnya.

Socket
Socket adalah suatu titik akhir dari hubungan komunikasi dua arah antara dua program yang berjalan di jaringan. Socket terikat dengan port number sehingga TCP layer dapat mengidentifikasi aplikasi yang mana datanya akan dikirimkan. Contohnya pada client server, ketika client akan bekomunikasi dengan server, client akan diberikan port number yang dapat digunakan untuk berkomunikasi dengan server. Socket berada dalam port number tersebut. Client menuliskan requestnya pada socket, begitu pula saat membaca  informasi yang diberikan oleh server. Ada dua jenis socket yaitu Socket local dan socket networking.
Socket local 
Socket ini berfungsi untuk melakukan komunikasi dengan perantaraan sebuah file. Socket ini digunakan untuk komunikasi aplikasi - aplikasi dalam satu mesin.

Socket Networking 
Socket ini digunakan untuk komunikasi antar aplikasi antar mesin yang berada dalam jaringan TCP/IP Identifikasi socket dilakukan menggunakan service identifier yang terdiri atas IP dan Port. Berikut ini jenis - jenis socket networking yang biasa digunakan :  
Stream Socket merupakan aliran komunikasi dua arah yang reliable menggunakan TCP. Data yang dikirimkan pada stream socket berada dalam urutan yang sama. Misal kita mengirim data "A", lalu "B", lalu "C", data yang diterima adalah "A","B,"kemudian "C" sesuai dengan urutannya. 
Datagram socket adalah komunikasi yang menggunakan UDP (User Datagram Protocol). Socket ini sering dikatakan sebagai connectionless. Untuk pengiriman data, socket hanya perlu membuat suatu paket yang tertera sebuah IP header dengan informasi tujuan dan mengirimkannya.



Referensi :
Modul Kuliah Jaringan Komputer Sistem dan Teknologi Informasi STEI ITB
http://www.teach-ict.com/as_a2_ict_new/ocr/AS_G061/317_role_impact_ict/networks/miniweb/pg7.htm#
http://docs.oracle.com/javase/tutorial/networking/sockets/definition.html
http://journals.ecs.soton.ac.uk/java/tutorial/networking/sockets/definition.html
http://artofwong.wordpress.com/2011/03/08/socket/