0% menganggap dokumen ini bermanfaat (0 suara)
207 tayangan33 halaman

03-Socket Programming (Fungsi)

Socket programming memungkinkan aplikasi untuk berkomunikasi melalui jaringan dengan menggunakan konsep socket dan descriptor. Socket menyediakan abstraksi untuk komunikasi jaringan dan memungkinkan aplikasi untuk berbagi data."

Diunggah oleh

HANDRI ZALIL
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
207 tayangan33 halaman

03-Socket Programming (Fungsi)

Socket programming memungkinkan aplikasi untuk berkomunikasi melalui jaringan dengan menggunakan konsep socket dan descriptor. Socket menyediakan abstraksi untuk komunikasi jaringan dan memungkinkan aplikasi untuk berbagi data."

Diunggah oleh

HANDRI ZALIL
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 33

SOCKET PROGRAMMING

(FUNGSI)
SEMESTER GENAP 2019/2020
WHAT IS SOCKET ? (1)

 Pada dasarnya, sebuah socket adalah sebuah abstraksi untuk komunikasi


jaringan. Melalui socket, aplikasi dapat mengirimkan dan menerima data.
 Soket memungkinkan aplikasi untuk terhubung ke jaringan dan berkomunikasi
dengan aplikasi lain yang terhubung ke jaringan yang sama. Informasi yang
ditulis ke soket oleh aplikasi pada satu mesin dapat dibaca oleh aplikasi pada
mesin yang berbeda dan sebaliknya.
WHAT IS SOCKET ? (2)

 Berkeley socket interface memperluas konsep file descriptor dengan sebuah socket descriptor
 Seperti file, socket yang aktif dikenali oleh bilangan bulat yang dikenal sebagai socket descriptor-nya
 Descriptor ini dialokasikan dalam cara yang sama seperti file descriptor, dalam tabel descriptor yang sama, oleh
proses
 Sebuah aplikasi tidak dapat memiliki file descriptor dan socket descriptor dengan nilai yang sama
WHAT IS SOCKET ? (3)

 Ketika sebuah aplikasi membuat file atau mulai bekerja dengan file yang ada, file descriptor dibuat
 Descriptor ini adalah pointer ke struktur data yang menggambarkan file
 Struktur data ini mungkin termasuk nama file, lokasi sebenarnya file pada disk atau dalam memori, apakah file tersebut
read-only atau read-write, dan ukuran file
 Demikian juga, ketika aplikasi membuat socket, socket descriptor yang dibuat menunjuk ke struktur data yang
memegang informasi tentang socket
 Informasi, mirip dengan file, berorientasi jaringan
 Struktur data socket mencakup informasi seperti jenis socket, alamat lokal dan port yang digunakan oleh socket, dan
alamat remote dan port yang akan menerima komunikasi dari soket
 Beberapa informasi ini mungkin tersedia dengan segera, dan beberapa mungkin diisi kemudian oleh function calls lain
WHAT IS SOCKET ? (4)

 Dengan memperluas konsep file/file descriptor, tim UC Berkeley membuat file descriptor mudah untuk
memvisualisasikan komunikasi di dalam jaringan
 Untuk berkomunikasi di jaringan, koneksi (socket) ke jaringan harus dibuka
 Setelah socket dibuka, data dibaca dari atau ditulis ke socket
 Ketika komunikasi selesai, koneksi ke jaringan ditutup dan sumber daya yang digunakan oleh socket dilepaskan
FUNGSI UTAMA PADA SOCKET

No Fungsi/ Operasi Penjelasan


1 Open Persiapan untuk operasi input atau output
2 Close Menghentikan operasi yang berlangsung sebelumnya dan
membebaskan sumber daya yang digunakan
3 Read Mengambil data dan menempatkannya di memori aplikasi
4 Write Meletakkan data dari memori aplikasi dan mengirimkan control

5 Control (ioctl) Set options seperti ukuran buffer dan tingkah laku koneksi
ALUR PEMANGGILAN FUNGSI
Server (Passive) Client (Active)
socket () socket()
bind () bind()
listen()
accept () connect()
write() read()
read() write()
close() close()
ALUR PEMANGGILAN FUNGSI
Server (Passive) Client (Active) • Pemanggilan fungsi pada client
• Aplikasi membuat socket dengan
socket () socket()
socket()
bind () bind() • Memanggil connect() untuk
menghubungi server
• Kemudian berinteraksi dengan server
listen()
dengan menggunakan write()
untuk mengirim permintaan ke server
accept () connect() • Dan read() untuk membaca
tanggapan dari server
write() read() • Jika client selesai, client memanggil
close().
read() write()
close() close()
ALUR PEMANGGILAN FUNGSI
Server (Passive) Client (Active) • Pemanggilan fungsi pada server
• Aplikasi membuat socket dengan socket()
socket () socket() • Kemudian memanggil bind() untuk menentukan
alamat dan port lokal yang digunakan
bind () bind() • Kemudian mulai memanggil listen() untuk
mengatur panjang antrian koneksi. Antrian koneksi
adalah jumlah permintaan bahwa aplikasi harus
listen() menunggu server untuk memproses permintaan saat
ini.
• Setelah antrian koneksi diatur, server memanggil
accept () connect() accept() dan menunggu hingga permintaan
sambungan berikutnya tiba dari client
write() read() • Ketika permintaan tiba, server menggunakan
read() dan write() untuk membaca
permintaan dan menulis tanggapan
read() write() • Setelah selesai, server memanggil close() untuk
mengakhiri koneksi ke client dan kembali ke fungsi
accept(), di mana server menunggu permintaan
close() close() sambungan berikutnya dari client
KONSTANTA SOCKET (1)

 Seperti application programming interface (API) lainnya, socket interface menggunakan satu kumpulan
konstanta simbolik dan deklarasi struktur data yang telah ditetapkan
 Ada dua set kumpulan dari konstanta yang digunakan dalam Berkeley socket interface: konstanta jenis protokol
(protocol type) dan konstanta keluarga alamat (address family)
 Selain itu, tersedia sejumlah deklarasi struktur data standar
 Konstanta, prototipe fungsi dan struktur data ini biasanya tersedia di file header
 Dua file yang harus disertakan adalah
 types.h dan socket.h
KONSTANTA SOCKET (2)

 File header types.h dan socket.h pada /usr/include/i386-linux-gnu/sys dan


/usr/include/i386-linux-gnu/bits
 Untuk keperluan saat
ini, konstanta protocol
family (PF_) dan
address family (AF_)
adalah sama walaupun
AF_ lebih dipilih
KONSTANTA ADDRESS FAMILY
No Address Family Deskripsi
1 AF_UNIX, AF_LOCAL Komunikasi local ke host yang sama
2 AF_INET IPV4 Internet protocols
3 AF_INET6 IPV6 Internet protocols
4 AF_IPX IPX-Novell protocols
5 AF_NETLINK Kernel user interface
6 AF_X25 X.25 protocols
7 AF_AX25 Radio amatir protocol AX.25
8 AF_ATMPVC ATM Private Virtual Circuits (PVCs)
9 AF_APPLETALK AppleTalk Protocols
10 AF_PACKET Low-level packet communications
KONSTANTA SOCKET TYPE
No Type Description
1 SOCK_STREAM Connection-based, diurutkan, reliable dan
komunikasi dua arah
2 SOCK_DGRAM Connectionless, unreliable dan fixed message
3 SOCK_SEQPACKET Komunikasi tipe pesan dengan Panjang paket tetap,
tetapi diurutkan dan rliable
4 SOCK_RAW Mengakses raw network protocols
5 SOCK_RDM Connectionless, reliable tanpa menggunakan urutan
packet tertentu/ khusus
6 SOCK_PACKET Obsolete dan seharusnya tidak digunakan
ARGUMEN FUNGSI SOCKET

Argument Penjelasan
Family Protocol atau address family (AF_INET untukTCP/IP;
AF_UNIX untuk internal
Type Type of service (SOCK_STREAM untuk TCP;
SOCK_DGRAM untuk UDP)
Protocol Nomor protokol yang digunakan, biasanya default nol
(0)
STRUKTUR ALAMAT (1)

 Berkeley socket interface menyediakan satu kumpulan struktur C yang terdefinisi yang membantu menangani
alamat endpoint yang berbeda dan tugas pemrograman socket lainnya
 Mungkin struktur yang paling penting adalah struktur sockaddr_in
 Tujuan struktur tersebut adalah untuk menyediakan cara standar penanganan alamat endpoint untuk komunikasi
jaringan
 Struktur sockaddr_in berisi alamat IP dan nomor port protokol
STRUKTUR ALAMAT (2)

 Struktur sockaddr_in
struct sockaddr_in{
short sin_family; /* type of address */
u_short sin_port; /* protocol port number */
/* network byte ordered */
struct in_addr sin_addr;
/* net address for the remote host */
/* network byte ordered */
char sin_zero[8];/* unused, set to zero */
};
 sin_family: 2 byte- sin_addr: struct in_addr
 sin_port: 2 byte - sin_zero: 8 byte (0)
STRUKTUR ALAMAT (3)

 Struktur in_addr
// Internet address (a structure for historical reasons)
struct in_addr{
unsigned long s_addr;
// that’s a 32-bit long, or 4 bytes
};
 s_addr: 4 byte (IP address)
STRUKTUR ALAMAT (4)

 Banyak standar layanan TCP/IP seperti FTP, NTP, DNS, dan lain-lain menggunakan port standar, tidak bergantung
pada sistem operasi host
 Port ini didefinisikan dalam file bernama /etc/services
 Pada MS Windows dapat dilihat pada \windows\system32\drivers\etc\services
BYTE ORDER FUNCTION (1)

 Protokol TCP/IP menentukan cara untuk merepresentasikan bilangan binary integer yang terdapat pada protocol
header
 Bilangan binary interger tersebut harus dinyatakan dengan most significant byte terlebih dahulu network byte order

 Protokol TCP/IP  Big Endian


 Berkeley team menyediakan beberapa conversion functions menjadi socket interface
 Fungsi ini secara otomatis menkonversi short and long integers dari network byte order menjadi the local host’s native
byte order

 Fungsi ini bekerja pada 16-bit dan 32-bit integers. Fungsi : htons(), ntohs(), htonl(), dan
ntohl()
BYTE ORDER FUNCTION (2)

 hton : convert integers from local host’s native byte order to network byte order.
 ntoh : convert integers from network byte order to the local host’s native byte order
 Fungsi yang diakhiri dengan:

 s untuk short integers


l untuk longs.
 Untuk kasus tertentu, pemanggilan fungsi ini tidak terlalu penting (unnecessary)
 Beberapa fungsi dan struktur akan menangani transformasi byte jaringan-ke-lokal tanpa perlu fungsi konversi
FUNGSI INTI/ FUNGSI UTAMA (1)

 int socket(int domain, int type, int protocol);

socket() digunakan untuk membuat network endpoint, dan itu mengembalikan soket deskriptor yang
digunakan kemudian oleh fungsi lain
socket() mengembalikan -1 jika terjadi error. Sebaliknya, sebuah nilai yang dikembalikan adalah descriptor
dari socket. Contoh : mySocket=(AF_INET, SOCK_STREAM,0);
 int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);

Fungsi bind() digunakan untuk bind (mengikat) socket ke sebuah alamat ketika socket dibuat
FUNGSI INTI/ FUNGSI UTAMA (2)

 int listen(int s, int backlog);

listen() digunakan untuk memberitahukan socket (yang telah dibuat) bahwa kita telah ready untuk menerima
koneksi, dan juga menentukan jumlah maximum koneksi yang boleh antri sebelum koneksi di tolak (refused)
backlog merupakan nilai yang menentukan antrian koneksi (connection queue). Nilai khas untuk backlog
adalah 5, meskipun bisa lebih besar sesuai kebutuhan.
 int accept(int s, struct sockaddr *addr, socklen_t *addrlen);

accept() mengambil socket descriptor, merupakan sebuah pointer to the address structure, dan panjang
(length) dari struct alamat sebagai parameternya
Hal utama yang perlu diingat dengan fungsi ini adalah bahwa fungsi ini biasanya akan berjalan dalam loop
tanpa akhir (endless loop)
FUNGSI INTI/ FUNGSI UTAMA (3)

 ssize_t write(int fd, const void *buf, size_t count);

write() menulis untuk menghitung byte dari isi buf ke deskriptor yang ditunjuk
 int close(int fd)

Hal yang harus dilakukan pertama kali adalah close child socket sesegera mungkin setelah proses write ke client
selesai

Ingat !! :

Meskipun kita telah close socket ini, fungsi accept() adalah fungsi pemblokiran dan berada dalam sebuah
loop. Segera setelah child socket di close, program kita akan kembali melakukan looping dan menunggu koneksi
lain.
FUNGSI SOCKET LAINNYA (1)

 int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t


addrlen);
Fungsi connect() mirip dengan fungsi bind(). Dibutuhkan socket deskriptor, penunjuk ke struktur alamat,
dan ukuran struktur alamat sebagai parameter.
Perbedaan dengan connect() adalah alamat yang digunakan pada parameter kedua adalah alamat server,
bukan alamat dari host yang menjalankan program client, seperti halnya dengan server dan bind(). Jika sukses,
connect() mengembalikan 0. Sebaliknya mengembalikan –1.
FUNGSI SOCKET LAINNYA (2)

 ssize_t read(int d, void *buf, size_t nbytes);

read() akan menerima nbytes data dan menyimpannya dalam buffer buf
Jika pemanggilan fungsi read berhasil, akan mengembalikan jumlah aktual byte yang di baca. Jika komunikasi
berkahir akan mengembalikan 0. Sebaliknya –1.
FUNGSI IDENTIFIKASI (1)

 Selain fungsi antarmuka soket inti, ada sejumlah fungsi lain yang dapat digunakan untuk mempermudah segala
hal pada pengembang.
 fungsi integer conversion htons(), htonl(), ntohs(), and ntohl()

inet_addr() , yang merupakan fungsi yang


 Pada sisi client, juga dapat menggunakan fungsi

mempermudah untuk konversi strings ke IP addresses yang compatible dengan struct sockaddr
FUNGSI IDENTIFIKASI (2)

 gethostbyaddr() and gethostbyname()


 gethostname() and sethostname()
 getservbyname() and getservbyport()
 getsockopt() and setsockopt()
FUNGSI DAN STRUKTUR (1)

 void bzero(void *s, size_t n): menulis jumlah null byte yang ditentukan ke tujuan yang ditentukan
 uint16_t htons(uint16_t hostshort): mengonversi bilangan bulat dari local host byteorder asli byte
order jaringan dalam short integer
 int inet_aton(const char *cp, struct in_addr *inp): mengonversi alamat internet host cp
dari IPv4 ke bentuk binary (dalam network byte order) dan menyimpannya di structure yang ditunjuk inp .
inet_aton() mengembalikan nilai nonzero jika alamat valid, 0 jika sebaliknya.
FUNGSI DAN STRUKTUR (2)

 void perror(const char *str): mencetak pesan kesalahan deskriptif ke stderr. Pertama
string str dicetak diikuti oleh titik dua kemudian spasi.
 errno: number of last error
 ssize_t recv(int sockfd, void *buf, size_t len, int
flags): menerima pesan dari connection-mode atau connectionless-mode socket. Biasanya digunakan
dengan connection-mode soket karena tidak mengizinkan aplikasi untuk mengambil alamat sumber data yang
diterima.
FUNGSI DAN STRUKTUR (3)

 ssize_t read(int fildes, void *buf, size_t nbyte): akan berusaha


membaca nbyte bytes dari file yang berasosiasi dengan file descriptor yang terbuka, fildes, kedalam
buffer yang ditunjuk oleh buf. Perilaku beberapa pembacaan bersamaan pada pipe, FIFO, atau perangkat
terminal yang sama tidak ditentukan..
FUNGSI DAN STRUKTUR (4)
 close(): merelokasi file descriptor ditunjukkan oleh fildes. Merelokasi berarti membuat file descriptor available untuk
perintah open() berikutnya atau fungsi lain yang mengalokasikan file descriptors .
 #include <netinet/in.h>

struct sockaddr_in {
short sin_family; // e.g. AF_INET
unsigned short sin_port; // e.g. htons(3490)
struct in_addr sin_addr; // see struct in_addr, below
char sin_zero[8]; // zero this if you want to
};
struct in_addr {
unsigned long s_addr; // load with inet_aton()
};
REFERENSI
Keir Davis, John W. Turner, dan Nathan Yocom, “The Definitive Guide to Linux Network Programming”, Apress, 2004

http://wiki.answers.com/Q/Bzero_function_in_socket_programming?#slide=1

http://linux.die.net/man/3/inet_aton

http://www.tutorialspoint.com/c_standard_library/c_function_perror.htm

http://man7.org/linux/man-pages/man3/errno.3. html

http://linux.die.net/man/3/recv

http://linux.die.net/man/3/read

http://linux.die.net/man/3/close

http:// linux.die.net/man/7/socket

http://www.gta.ufrj.br/ensino/eel878/sockets/sockaddr_inman.html
THANK YOU
[email protected]

Anda mungkin juga menyukai