Application Programming Interface (API) dapat digunakan oleh user untuk dapat membuat suatu aplikasi. Sedangkan untuk fasilitas jaringannya dapat menggunakan API bagian SOCKET. Dalam bagian ini akan dijelaskan contoh API yang digunakan untuk jaringan.
Pada bab ini dijelaskan bagaimana menggunakan bahasa pemrograman C untuk kepentingan jaringan pada mesin linux.
Contoh kompilasi dan menjalankan program:
# gcc --o program source.c
# ./program
Struktur dan Penanganan Data
Sebelum menggunakan pemrograman socket diperlukan suatu variable struktur untuk menyimpan informasi tentang jaringan. Struktur yang diperlukan antara lain :
Contoh penggunaannya yaitu:
struct sockaddr { unsigned short sa_family; // address family, AF_xxx char sa_data[14]; // 14 bytes of protocol address
};
Dimana, sa_family digunakan untuk penentuan jenis family yang digunakan pada bab ini menggunakan AF_INET artinya menggunakan family INTERNETWORKING. Sedangkan untuk sa_data digunakan untuk informasi tujuan dan port yang digunakan.
Untuk menggunakan struktur tersebut diperlukan 1 lagi struktur yaitu sockadd_in dimana arti "in" adalah internet
struct sockaddr_in { short int sin_family; // Address family unsigned short int sin_port; // Port number struct in_addr sin_addr; // Internet address
unsigned char sin_zero[8]; // Same size as struct sockaddr
};
Dengan struktur ini maka programmer akan dengan mudah mengontrol data. Pada bagian sin_zero digunakan sebagai pelengkap dimana harus diset dengan nilai 0, hal tersebut dapat digunakan fungsi memset().
Untuk menggunakan alamat IP perlu juga sebuah variabel struktur yaitu struktur in_addr, dimana struktur in_addr adalah sebagai berikut:
// Internet address (a structure for historical reasons) struct in_addr { unsigned long s_addr; // that's a 32-bit long, or 4 bytes
};
Sehingga untuk penggunanya dapat dilakukan dengan cara, membuat sebuah variable contoh ina dan bertipe struct sockaddr_in maka ina.sin_addr.s_addr dapat digunakan sebagai objek untuk alamat IP.
1.1. Perubahan variable
Perubahan awal yang dapat digunakan adalah perubahan dari short (2 byte) menjadi long (4 byte). Kemudian perubahan lainnya adalah perubahan dari host menjadi network. Sehingga masing-masing perubahan bisa disingkat menjadi 1 huruf yaitu , s, l, n, dan h.
Fungsi yang dapat digunakan untuk perubahan tersebut antara lain:
- htons() : perubahan host ke network dengan sistem short
- htonl() : perubahan host ke network dengan sistem long
- ntohs() : perubahan network ke host dengan sistem short
- ntohl() : perubahan network ke host dengan sistem long.
1.2. Penanganan alamat IP
Ada beberapa cara untuk memasukkan alamat IP kedalam suatu variable pada pemrograman socket.
Apabila kita sudah memiliki variable struct sockadd_in ina, dan kita memiliki alamat IP "10.252.102.23". Maka dengan fungsi inet_addr(), akan dapat merubah alamat IP menjadi unsigned long. Contoh penggunaan:
ina.sin_addr.s_addr = inet_addr("10.252.102.23");
Selain itu ada cara yang lainnya, yaitu dengan menggunakan inet_aton:
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int inet_aton(const char *cp, struct in_addr *inp);
Dan contoh penggunaannya adalah sebagai berikut:
struct sockaddr_in my_addr;
my_addr.sin_family = AF_INET; // host byte order my_addr.sin_port = htons(MYPORT); // short, network byte order inet_aton("10.252.102.53", &(my_addr.sin_addr));
memset(&(my_addr.sin_zero), '\0', 8); // zero the rest of the struct
Sehingga apabila kita ingin menampilkan isi variabel tersebut dapat dilakukan dengan fungsi tambahan inet_ntoa (network to ascii).
printf("%s", inet_ntoa(ina.sin_addr));
Contoh lengkapnya:
char *a1, *a2; . . a1 = inet_ntoa(ina1.sin_addr);
//this is 192.168.4.14 a2 = inet_ntoa(ina2.sin_addr);
// this is 10.12.110.57 printf("address 1: %s\n",a1);
printf("address 2: %s\n",a2);
akan menghasilkan
address 1: 10.12.110.57 address 2: 10.12.110.57