Bab 11 Socket Programming Tcp Lanjut

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Bab 11 Socket Programming Tcp Lanjut as PDF for free.

More details

  • Words: 1,076
  • Pages: 9
PRAKTIKUM X SOCKET PROGRAMMING TCP LANJUT

I.

Tujuan 1. Mahasiswa memahami konsep Stream Socket. 2. Mahasiswa memahami konsep koneksi pada pemprograman socket. 3. Mahasiswa memahami tipe – tipe koneksi server pada pemprograman socket. 4. Mahasiswa mampu membangun program socket sederhana memakai tipe koneksi yang ada.

II.

Peralatan Yang Dibutuhkan 1. Beberapa komputer yang berfungsi sebagai server. 2. Beberapa komputer yang berfungsi sebagai client. 3. Hub/switch sebagai penghubung jaringan. 4. Kabel jaringan secukupnya.

III.

Dasar Teori Pada

praktikum

sebelumnya

telah

dipelajari

tentang

dasar



dasar

pemprograman socket. Dua type pemprograman socket yang paling utama yaitu stream socket/TCP dan datagram socket/UDP. Pada stream socket dalam melakukan koneksi salah satu prosedur yang penting adalah accept(), yang dipakai untuk menerima koneksi dari client. Pada server dikenal beberapa tipe penerimaan koneksi yaitu :  Iterating Server  Concurrent Server Iterating Server Pada iterating server hanya dimungkinkan satu socket yang dibuka pada satu waktu. Setelah proses koneksi selesai, socket ditutup dan koneksi yang lain baru bisa diterima.

110

Gambar 11.1 berikut adalah ilustrasi koneksi dua client menggunakan iterating server.

Gambar 11.1 Iterating Server Meskipun terjadi koneksi dua client tapi yang dilayani adalah client yang pertama koneksi, setelah koneksi client1 selesai, baru client2 bisa dilayani. Sementara server melayani koneksi client1 maka koneksi yang lain diblok. Dasar flow pada iterating server bisa dilihat pada gambar 11.2.

Gambar 11.2 Dasar flow pada Iterating Server

Concurrence Server

111

Berbeda dengan Iterating server yang hanya bisa menerima koneksi satu pada satu waktu, concurrence server bisa memungkinkan melakukan beberapa koneksi dalam satu waktu.

Gambar 11.3 Concurrent Server Untuk melakukan monitor terhadap banyak socket secara bersamaan maka diperlukan prosedure select(). Pada percobaan praktikum kali ini kita mencoba membuat program concurrent server.

IV.

Tugas Pendahuluan 1. Jelaskan prinsip kerja socket programming untuk komunikasi dua arah 2. Jelaskan perbedaan TCP dan UDP

V.

Percobaan 1. Dengan memakai editor vi tuliskan kembali program di bawah ini. Simpan sesuai dengan nama yang ada pada comment program /*

112

** selectserver.c -- program chatting

sederhana menggunakan

stream socket */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include #include <sys/types.h> #include <sys/socket.h> #include #include <arpa/inet.h> #define PORT 8888

// nomer port yg dipilih

int main(void) { fd_set master;

// master file descriptor

list fd_set read_fds;

//

temp

file

descriptor

list utk select() struct sockaddr_in myaddr;

// alamat IP server

struct sockaddr_in remoteaddr;

// alamat IP client

int fdmax;

//

jumlah

maximum

file

descriptor int listener;

//

listening

socket

descriptor int newfd;

// socket descriptor yg baru

diterima char buf[256];

// buffer for client data

int nbytes; int yes=1; int addrlen; int i, j; FD_ZERO(&master);

//

master

dan

temp

diberi nilai 0 FD_ZERO(&read_fds); // socket () system call digunakan utk inisialisasi socket

113

// socket() system call dgn argumen 1. domain

2. jenis

socket 3. protokol // socket() menghasilkan nilai socket descriptor, // jika nilai return = -1, berarti terjadi error printf("Memanggil socket system call untuk inisialisasi socket.... \n"); if ((listener = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); printf("inisialisasi socket gagal...ada error...\n"); exit(1); } // setsockopt digunakan utk mengambil/mengeset option utk socket if (setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) { perror("setsockopt"); exit(1); } // memanggil bind system call untuk memberi nomor port ke socket // printf("Memanggil bind system call untuk inisialisasi nomer port ke socket...\n"); myaddr.sin_family = AF_INET; myaddr.sin_addr.s_addr = INADDR_ANY; myaddr.sin_port = htons(PORT);

// host to

network short; mengubah big endian memset(&(myaddr.sin_zero), '\0', 8); if

(bind(listener,

(struct

// ke little endian sockaddr

*)&myaddr,

sizeof(myaddr)) == -1) { perror("bind"); exit(1); } // memanggil listen system call //

listen

berfungsi

untuk

mendeteksi

adanya

sinyal

permintaan koneksi ke server

114

// jumlah koneksi dibatasi 10 printf("Memanggil

listen

system

call

untuk

menunggu

permintaan koneksi dari client \n"); if (listen(listener, 10) == -1) { perror("listen"); exit(1); } // menambah listerner ke

master set

FD_SET(listener, &master); // mengacu ke

nilai file descriptor tertinggi

fdmax = listener;

// fdmax baru berisi 1

printf("Server sudah aktif, ketik perintah \n"); printf("Nomer port yg digunakan adalah %d \n",PORT); // LOOP utama for(;;) { read_fds = master;

//

simpan

data

ke

variabel lain // memanggil system call select() // menunggu ada sinyal koneksi dari client // select() : memonitor banyak socket secara bersamaan if (select(fdmax+1, &read_fds, NULL, NULL, NULL) == -1) { perror("select"); exit(1); } // membaca semua data pada semua client yg sudah terhubung for(i = 0; i <= fdmax; i++) { if (FD_ISSET(i, &read_fds)) { // ada 1 lagi yang masuk if (i == listener) { // menghandle koneksi yg baru masuk addrlen = sizeof(remoteaddr);

115

// accept system call digunakan untuk menghandle // adanya sinyal permintaan koneksi dari client if ((newfd = accept(listener, (struct sockaddr *)&remoteaddr, &addrlen)) == -1) { perror("accept"); } else { FD_SET(newfd, &master); // menambahkan ke master set if (newfd > fdmax) {

//

menyimpan jumlah yg terhubung fdmax = newfd; } printf("Ada koneksi baru dari mesin dengan IP address %s " "nomer socket %d\n", inet_ntoa(remoteaddr.sin_addr), newfd); } } else { // meng-handle data dari client // menerima sinyal yg masuk dengan perintah recv system call if ((nbytes = recv(i, buf, sizeof(buf), 0)) <= 0) { // ada error atau koneksi diputus oleh client if (nbytes == 0) { // koneksi terputus printf("socket no %d terputus\n", i); } else { perror("recv"); } close(i); // bye FD_CLR(i, &master); // client yg terputus dihapus dari master set } else { // membaca data dari client for(j = 0; j <= fdmax; j++) {

116

// mengirimkan ke semua client menggunakan send() system call if (FD_ISSET(j, &master)) { // kecuali server atau diri sendiri if (j != listener && j != i) { if (send(j, buf, nbytes, 0) == -1) { perror("send"); } } } } } } } } } return 0; }

2. Berikan komentar tiap baris pada program tersebut apa maksud dan kegunaan perintah diatas bila dihubungkan dengan stream socket 3. Dengan memakai concurrent server, buatlah program yang bisa menerima permintaan dari beberapa client berupa permintaan untuk menampilkan tanggal dan jam server di client (di client memasukkan perintah date/time maka server akan mengirim bali tanggal/jam server sekarang dan client menampilkan apa yang diterima di server tersebut).

117

VI.

Laporan Resmi FORMAT LAPORAN RESMI Nama dan NRP mahasiswa

Judul Percobaan : Socket Programming TCP Lanjut Dasar Teori :

Tugas Pendahuluan :

Hasil percobaan :

Daftar Pertanyaan Berikan kesimpulan praktikum yang anda lakukan. Selain dua tipe penerimaan koneksi pada stream socket : iteratif server dan concurent server dikenal pula folking server. Jelaskan secara singkat apa itu folking server dan apa perbedaan dengan iteratif dan concurent.

118

Related Documents

Socket Programming
June 2020 9
Socket Programming
October 2019 24
Socket Programming
November 2019 22
C Socket Programming
November 2019 18